Difference between revisions of "OCaml"

From HaskellWiki
Jump to navigation Jump to search
Line 80: Line 80:
 
OCaml's <tt>let</tt> is non-recursive by default, but has the form <tt>let rec</tt> for defining recursive functions.
 
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.
+
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.

Revision as of 23:09, 11 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.

Syntactic dictionary

Language 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 = D (a -> a)
data E a b = L a | R b
type 'a d = D of ('a -> 'a)
type ('a, 'b) e = L of 'a | R of 'b
Pattern matching
case x of
  A x -> ...
  C a b -> ...
match x with
  B x -> ...
  C (a, b) -> ...

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.