|
λ-calc. |
Haskell 98 |
SML 97 |
λx.e |
\x->e |
fn x=>e |
normal-order evaluation |
by need, non-strict |
eager, strict |
fixed-point combinator, Y |
triggers a type-checker bug in ghc!['05] |
y.sml |
ho hum :-) |
Haskell 98 |
SML 97 |
: |
h:t, list cons(tructor) |
e:t, e has type t |
:: |
e::t, e has type t |
x::xs, list cons(tructor) |
|
Haskell 98 |
SML 97 |
e has type t |
e :: t |
e : t |
reference type |
n.a. |
t ref (contents, deref, !x) (assign, :=) |
polymorphic type |
data T u v = C u v |... |
datatype ('u, 'v) t = C of 'u*'v |... |
product type, U×V×... |
(u,v,...) |
u*v*... |
function type, -> |
u -> v |
u -> v |
t*, i.e., the type `list of t', |
[t] |
t list |
tuple value |
(x1, x2, ...)
| (x1, x2, ...)
|
list cons |
x : xs |
x :: xs |
empty list, < >, ε |
[] |
nil or [] |
non-empty list |
[1,2,3] |
[1,2,3] |
function |
sqr x = x*x |
fun sqr x = x*x |
function by cases |
len [] = 0 len (_:xs) = 1 + len xs |
fun len [] = 0 | len (_::xs) = 1 + len xs |
anonymous function λx.e |
\x-> e |
fn x=>e |
composition |
(.)::(b->c)->(a->b)->a->c |
op o:('b->'c)*('a->'b)->'a->'c
e.g., ((fn x=>x+1)o(fn x=>x*x)) 2
val it = 5 : int
|
let |
let decs in exp |
let decs in exp end |
conditional |
if e then et else ef |
if e then et else ef |
case |
case e of pat->e |... |
case e of pat=>e |... |
|
|