The system automatically handles application of values of function type.
However the user can provide overloaded applicators for a value of
type d to a value of type c by defining
a function named apply of type d -> c.
In addition, a constructor for a named type t can be
defined by a function with the name _ctor_t.
This function will be invisible if the type already has a constructor
defined by the system, for example a struct. In fact there
is no requirement that the function return the specified type: this
feature is purely syntactic sugar which is use when a function is
expected and a named type is found. Algebraic types can be used
via a typedef name.