Had to implement both functions as arguments and type
place holders (variables) for type constructors.
Had to implement functions as a type as well.
Still have to figure out how to pass functions around.
Foldable take a TypeConstructor. The first argument must be a
NatNum.
The FunctionSignatureRouter wasn't completely on point, instead
this commit adds an TypeClassArgsRouter lookup router. This
makes sense since the only available arguments we have to find
a router is the list of type class arguments.