Question

What is the difference between the `fun` and `function` keywords?

Sometimes I see code like

let (alt : recognizer -> recognizer -> recognizer) =
  fun a b p -> union  (a p) (b p)

Or like:

let hd = function
    Cons(x,xf) -> x
  | Nil -> raise Empty

What is the difference between fun and function?

 45  26563  45
1 Jan 1970

Solution

 51

The semantics for this is the same as in F# (probably because F# is based on OCaml):

  • function allows the use of pattern matching (i.e. |), but consequently it can be passed only one argument.

    function p_1 -> exp_1 | … | p_n -> exp_n
    

    is equivalent to

    fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
    
  • fun does not allow pattern matching, but can be passed multiple arguments, e.g.

    fun x y -> x + y
    

When either of the two forms can be used, fun is generally preferred due to its compactness.

See also OCaml documentation on Functions.

2009-10-21

Solution

 24

The way I think about it

function patterns

is shorthand for

(fun x -> match x with patterns)

where 'patterns' is e.g.

| Some(x) -> yadda | None -> blah

(And

fun args -> expr

is how you define a lambda.)

2009-10-22