A BinaryFunction is some function taking two arguments -
fn(x, y).
It returns some Object, and may return the same object or different objects for
each invocation, even given the same arguments.
A Generator describes a function which takes no arguments - fn().
It returns some Object, and may return the same object or different objects for
each invocation.
A UnaryFunction describes a function which takes one argument - fn(x).
It returns some Object, and may return the same object or different objects for
each invocation, even given the same argument.