Safe Haskell | None |
---|---|
Language | Haskell2010 |
The Expanded
class helps keep track of which Type
values have
been fully expanded to a canonical form. This lets us use the Eq
and Ord
relationships on Type
and Pred
values when reasoning
about instance context. What the expandType
function does is use
the function from th-desugar
to replace occurrences of ConT name
with the associated Type
if name
is a declared type synonym
TySynD name _ typ
. For convenience, a wrapper type E
is
provided, along with the Expanded
instances E Type
and E
Pred
. Now the expandType
and expandPred
functions can be used
to return values of type E Type
and E Pred
respectively.
Instances Expanded Type Type
and Expanded Pred Pred
are
provided in Language.Haskell.TH.Context.Unsafe, for when less
type safety is required.
- class Expanded un ex | ex -> un where
- markExpanded :: un -> ex
- runExpanded' :: ex -> un
- runExpanded :: Expanded a (E a) => E a -> a
- expandType :: (DsMonad m, Expanded Type e) => Type -> m e
- expandPred :: (DsMonad m, Expanded Pred e) => Pred -> m e
- expandClassP :: forall m e. (DsMonad m, Expanded Pred e) => Name -> [Type] -> m e
- newtype E a = E a
Documentation
class Expanded un ex | ex -> un where Source
This class lets us use the same expand* functions to work with specially marked expanded types or with the original types.
:: un | |
-> ex | Unsafely mark a value as expanded |
:: ex | |
-> un | Strip mark off an expanded value |
runExpanded :: Expanded a (E a) => E a -> a Source
expandType :: (DsMonad m, Expanded Type e) => Type -> m e Source
Apply the th-desugar expand function to a Type
and mark it as expanded.