Mon Jan 2 08:11:48 EST 2012
To move forward I need a systematically different approach. I don't
think the problem is correctness -- though that is still possible
because I can't explain some of the error messages where the order of
type constructors is flipped.
The problem is really not understanding where the error originates.
How to "query" a type?
I had used this before to equate types:
typeEq :: (Monad m) => t -> t -> m ()
typeEq _ _ = return ()
In a monad it's simple to insert a "statement" like that without
affecting anything else.
What about using this trick and add an extra argument to a function
that's only used in conjunction with a variable that I want to know
the type of. I.e.
expr test = do ...
typeEq somevar test