Fri Oct 14 17:21:26 EDT 2011


So what about this one:

class TermApp f where
  termApp :: f -> [VarName] -> ([STerm], m [STerm])

Starting from a function and a variable name supply, produce a list of
input/output variables, with the latter wrapped in a binding monad.

The have to be STerm and not Term because we can't put the latter in a
list due to typing constraints.

The first problem to solve is, how to create a Term t object from an
STerm?  Maybe that's the real deal here: how to create properly typed

Maybe that's it.  Am I looking at this the wrong way?  Map a function
to its inputs and outputs and be done..