OCaml
From HaskellWiki
(Difference between revisions)
Benmachine (Talk  contribs) (→Syntactic dictionary) 
Benmachine (Talk  contribs) (→Syntactic dictionary) 

Line 67:  Line 67:  
case x of  case x of  
A x  A x  
−  <nowiki></nowiki> x  +  <nowiki></nowiki> x > 0 > ... 
C a b > ...  C a b > ...  
    
match x with  match x with  
−  B x when x  +  B x when x > 0 > ... 
C (a, b) > ...  C (a, b) > ...  
−   There doesn't seem to be syntax for  +   There doesn't seem to be syntax for multiple guards 
}  }  
Revision as of 01:01, 12 December 2012
OCaml is a functional programming language in the ML family, an extension of the Caml language with objectoriented constructs.
This page aims to cover some of its differences from Haskell.
1 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  x > 0 > ... C a b > ... 
match x with B x when x > 0 > ... C (a, b) > ... 
There doesn't seem to be syntax for multiple guards 
2 Conceptual differences
OCaml is strict by default, although it has some facility for introducing laziness.
OCaml's let is nonrecursive 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.