Copyright | (C) 2015-2016 University of Twente |
---|---|
License | BSD2 (see the file LICENSE) |
Maintainer | Christiaan Baaij <christiaan.baaij@gmail.com> |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Extensions | Cpp |
Synopsis
- newWanted :: CtLoc -> PredType -> TcPluginM CtEvidence
- newGiven :: CtLoc -> PredType -> EvTerm -> TcPluginM CtEvidence
- newDerived :: CtLoc -> PredType -> TcPluginM CtEvidence
- evByFiat :: String -> Type -> Type -> EvTerm
- lookupModule :: ModuleName -> FastString -> TcPluginM Module
- lookupName :: Module -> OccName -> TcPluginM Name
- tracePlugin :: String -> TcPlugin -> TcPlugin
- flattenGivens :: [Ct] -> [Ct]
- mkSubst :: Ct -> Maybe ((TcTyVar, TcType), Ct)
- mkSubst' :: [Ct] -> [((TcTyVar, TcType), Ct)]
- substType :: [(TcTyVar, TcType)] -> TcType -> TcType
- substCt :: [(TcTyVar, TcType)] -> Ct -> Ct
Create new constraints
newGiven :: CtLoc -> PredType -> EvTerm -> TcPluginM CtEvidence Source #
Create a new [G]iven constraint, with the supplied evidence. This must not
be invoked from tcPluginInit
or tcPluginStop
, or it will panic.
newDerived :: CtLoc -> PredType -> TcPluginM CtEvidence Source #
Create a new [D]erived constraint.
Creating evidence
:: String | Name the coercion should have |
-> Type | The LHS of the equivalence relation (~) |
-> Type | The RHS of the equivalence relation (~) |
-> EvTerm |
The EvTerm
equivalent for unsafeCoerce
Lookup
:: ModuleName | Name of the module |
-> FastString | Name of the package containing the module. NOTE: This value is ignored on ghc>=8.0. |
-> TcPluginM Module |
Find a module
Trace state of the plugin
tracePlugin :: String -> TcPlugin -> TcPlugin Source #
Print out extra information about the initialisation, stop, and every run
of the plugin when -ddump-tc-trace
is enabled.
Substitutions
flattenGivens :: [Ct] -> [Ct] Source #
Flattens evidence of constraints by substituting each others equalities.
NB: Should only be used on [G]iven constraints!
NB: Doesn't flatten under binders
mkSubst :: Ct -> Maybe ((TcTyVar, TcType), Ct) Source #
Create simple substitution from type equalities
mkSubst' :: [Ct] -> [((TcTyVar, TcType), Ct)] Source #
Create flattened substitutions from type equalities, i.e. the substitutions have been applied to each others right hand sides.