# Functions
Applicator turns function "M[f: X => Y]" into "f: X => M[Y]".
Collect takes a slice of Maybe[X] and returns a slice of []X and true iff every element contains a value.
Compose takes two functions of the form "xy: M[X] => M[Y]" and "yz: M[Y] => M[Z]" and returns a function "xz(M[X]) => M[Z]".
FlatMap turns function "f: X => M[Y]" into "f: M(X) => M[Y]".
Lift converts a function of the form "f: X => Y" to the form "f: X => M[Y]" where M[Y] == Some(y).
Map turns function "f: X => Y" into "f: M(X) => M[Y]".
New returns a M.
Nothing returns a (typed) M that has no value.
Some returns a M that contains a value.
UnwrapFunc converts a function of the form "f: X => M[Y]" to the form "f: X => ([Y], ok bool)".
WrapFunc converts a function of the form "f: X => (Y, ok bool)" to the form "f: X => M[X].
WrapFunc2 converts a function of the form "f(A, B) => (C, ok bool)" to the form "f(A, B) => M[C].
WrapFunc3 converts a function of the form "f(A, B, C) => (D, ok bool)" to the form "f(A, B, C) => M[D].
WrapFunc4 converts a function of the form "f(A, B, C, D) => (E, ok bool)" to the form "f(A, B, C, D) => M[E].