MLton 20210117

# Closure

A closure is a data structure that is the run-time representation of a function.

## Typical Implementation

In a typical implementation, a closure consists of a code pointer (indicating what the function does) and an environment containing the values of the free variables of the function. For example, in the expression

    let
       val x = 5
    in
       fn y => x + y
    end

the closure for fn y => x + y contains a pointer to a piece of code that knows to take its argument and add the value of x to it, plus the environment recording the value of x as 5.

To call a function, the code pointer is extracted and jumped to, passing in some agreed upon location the environment and the argument.

## MLton’s Implementation

MLton does not implement closures traditionally. Instead, based on whole-program higher-order control-flow analysis, MLton represents a function as an element of a sum type, where the variant indicates which function it is and carries the free variables as arguments. See ClosureConvert and CejtinEtAl00 for details.