Type Inference Monad
newtype IM i c ans = ...
type TI i = IM i (TypeConstraint i)
type KI i = IM i KindConstraint
IM is a combination of standard monads, providing
- environments,
- name supply,
- constraint collection and
- error handling.
A class for conventient generation of unique names:
class Fresh a where
fresh :: IM i c a