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

f#, ocaml

Solution

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.

Problem

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`?

Original source