Safe Haskell | None |
---|---|
Language | Haskell98 |
Expand synonyms
expandSyns :: Type -> Q Type Source
Expands all type synonyms in the given type. Type families currently won't be expanded (but will be passed through).
Misc utilities
evades :: Data t => [Name] -> t -> [Name] Source
Make a list of names (based on the first arg) such that every name in the result is distinct from every name in the second arg, and from the other results
evade :: Data d => Name -> d -> Name Source
Make a name (based on the first arg) that's distinct from every name in the second arg
Example why this is necessary:
type E x = forall y. Either x y ... expandSyns [t| forall y. y -> E y |]
The example as given may actually work correctly without any special capture-avoidance depending
on how GHC handles the y
s, but in any case, the input type to expandSyns may be an explicit
AST using mkName
to ensure a collision.