OCaml: Difference between revisions
Benmachine (talk | contribs) |
Benmachine (talk | contribs) No edit summary |
||
Line 2: | Line 2: | ||
This page aims to cover some of its differences from Haskell. | This page aims to cover some of its differences from Haskell. | ||
== Conceptual differences == | |||
OCaml is strict by default, although it has some facility for introducing laziness. | |||
OCaml's <tt>let</tt> is non-recursive by default, but has the form <tt>let rec</tt> for defining recursive functions. | |||
OCaml is impure: although it makes heavy use of immutable data, it also has mutable references and arrays available, and IO is performed by ordinary functions. | |||
== Syntactic dictionary == | == Syntactic dictionary == | ||
Line 84: | Line 92: | ||
| | | | ||
|} | |} | ||
Revision as of 18:09, 12 December 2012
OCaml is a functional programming language in the ML family, an extension of the Caml language with object-oriented constructs.
This page aims to cover some of its differences from Haskell.
Conceptual differences
OCaml is strict by default, although it has some facility for introducing laziness.
OCaml's let is non-recursive by default, but has the form let rec for defining recursive functions.
OCaml is impure: although it makes heavy use of immutable data, it also has mutable references and arrays available, and IO is performed by ordinary functions.
Syntactic dictionary
Haskell | OCaml | Comments | |
Anonymous functions |
\x y -> ... |
fun x y -> ... |
|
Multiple assignments |
let x = 4 y = 5 in ... |
let x = 4 and y = 5 in ... |
|
Types |
Int, Bool, (Double, Char), a |
int, bool, float * char, 'a |
float is a double type |
Type signatures |
const :: a -> b -> a |
const : 'a -> 'b -> 'a |
Signatures usually omitted in OCaml |
Type declarations |
data A = B Int | C Char Bool x = B 3 y = C 'a' True |
type a = B of int | C of char * bool let x = B 3 and y = C ('a', true) |
|
Parametrised types |
data D a = MkD (a -> a) data E a b = L a | R b |
type 'a d = MkD of ('a -> 'a) type ('a, 'b) e = L of 'a | R of 'b | |
Pattern matching |
case x of B x | x > 0 -> ... | otherwise -> ... C a b -> ... case L () of L x -> x R x -> x |
match x with B x when x > 0 -> ... B x -> ... | C (a, b) -> ... match L () with L x | R x -> x |