| Safe Haskell | None |
|---|
Language.HERMIT.Kure
Contents
- module Language.KURE
- module Language.KURE.Injection
- data KureM a
- runKureM :: (a -> b) -> (String -> b) -> KureM a -> b
- fromKureM :: (String -> a) -> KureM a -> a
- type TranslateH a b = Translate HermitC HermitM a b
- type RewriteH a = Rewrite HermitC HermitM a
- type LensH a b = Lens HermitC HermitM a b
- idR :: RewriteH a
- modGutsT :: TranslateH CoreProg a -> (ModGuts -> a -> b) -> TranslateH ModGuts b
- modGutsR :: RewriteH CoreProg -> RewriteH ModGuts
- progNilT :: b -> TranslateH CoreProg b
- progConsT :: TranslateH CoreBind a1 -> TranslateH CoreProg a2 -> (a1 -> a2 -> b) -> TranslateH CoreProg b
- progConsAllR :: RewriteH CoreBind -> RewriteH CoreProg -> RewriteH CoreProg
- progConsAnyR :: RewriteH CoreBind -> RewriteH CoreProg -> RewriteH CoreProg
- progConsOneR :: RewriteH CoreBind -> RewriteH CoreProg -> RewriteH CoreProg
- nonRecT :: TranslateH CoreExpr a -> (Var -> a -> b) -> TranslateH CoreBind b
- nonRecR :: RewriteH CoreExpr -> RewriteH CoreBind
- recT :: (Int -> TranslateH CoreDef a) -> ([a] -> b) -> TranslateH CoreBind b
- recAllR :: (Int -> RewriteH CoreDef) -> RewriteH CoreBind
- recAnyR :: (Int -> RewriteH CoreDef) -> RewriteH CoreBind
- recOneR :: (Int -> RewriteH CoreDef) -> RewriteH CoreBind
- defT :: TranslateH CoreExpr a -> (Id -> a -> b) -> TranslateH CoreDef b
- defR :: RewriteH CoreExpr -> RewriteH CoreDef
- altT :: TranslateH CoreExpr a -> (AltCon -> [Id] -> a -> b) -> TranslateH CoreAlt b
- altR :: RewriteH CoreExpr -> RewriteH CoreAlt
- varT :: (Var -> b) -> TranslateH CoreExpr b
- litT :: (Literal -> b) -> TranslateH CoreExpr b
- appT :: TranslateH CoreExpr a1 -> TranslateH CoreExpr a2 -> (a1 -> a2 -> b) -> TranslateH CoreExpr b
- appAllR :: RewriteH CoreExpr -> RewriteH CoreExpr -> RewriteH CoreExpr
- appAnyR :: RewriteH CoreExpr -> RewriteH CoreExpr -> RewriteH CoreExpr
- appOneR :: RewriteH CoreExpr -> RewriteH CoreExpr -> RewriteH CoreExpr
- lamT :: TranslateH CoreExpr a -> (Var -> a -> b) -> TranslateH CoreExpr b
- lamR :: RewriteH CoreExpr -> RewriteH CoreExpr
- letT :: TranslateH CoreBind a1 -> TranslateH CoreExpr a2 -> (a1 -> a2 -> b) -> TranslateH CoreExpr b
- letAllR :: RewriteH CoreBind -> RewriteH CoreExpr -> RewriteH CoreExpr
- letAnyR :: RewriteH CoreBind -> RewriteH CoreExpr -> RewriteH CoreExpr
- letOneR :: RewriteH CoreBind -> RewriteH CoreExpr -> RewriteH CoreExpr
- caseT :: TranslateH CoreExpr a1 -> (Int -> TranslateH CoreAlt a2) -> (a1 -> Id -> Type -> [a2] -> b) -> TranslateH CoreExpr b
- caseAllR :: RewriteH CoreExpr -> (Int -> RewriteH CoreAlt) -> RewriteH CoreExpr
- caseAnyR :: RewriteH CoreExpr -> (Int -> RewriteH CoreAlt) -> RewriteH CoreExpr
- caseOneR :: RewriteH CoreExpr -> (Int -> RewriteH CoreAlt) -> RewriteH CoreExpr
- castT :: TranslateH CoreExpr a -> (a -> Coercion -> b) -> TranslateH CoreExpr b
- castR :: RewriteH CoreExpr -> RewriteH CoreExpr
- tickT :: TranslateH CoreExpr a -> (CoreTickish -> a -> b) -> TranslateH CoreExpr b
- tickR :: RewriteH CoreExpr -> RewriteH CoreExpr
- typeT :: (Type -> b) -> TranslateH CoreExpr b
- coercionT :: (Coercion -> b) -> TranslateH CoreExpr b
- recDefT :: (Int -> TranslateH CoreExpr a1) -> ([(Id, a1)] -> b) -> TranslateH CoreBind b
- recDefAllR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreBind
- recDefAnyR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreBind
- recDefOneR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreBind
- letNonRecT :: TranslateH CoreExpr a1 -> TranslateH CoreExpr a2 -> (Var -> a1 -> a2 -> b) -> TranslateH CoreExpr b
- letNonRecAllR :: RewriteH CoreExpr -> RewriteH CoreExpr -> RewriteH CoreExpr
- letNonRecAnyR :: RewriteH CoreExpr -> RewriteH CoreExpr -> RewriteH CoreExpr
- letNonRecOneR :: RewriteH CoreExpr -> RewriteH CoreExpr -> RewriteH CoreExpr
- letRecT :: (Int -> TranslateH CoreDef a1) -> TranslateH CoreExpr a2 -> ([a1] -> a2 -> b) -> TranslateH CoreExpr b
- letRecAllR :: (Int -> RewriteH CoreDef) -> RewriteH CoreExpr -> RewriteH CoreExpr
- letRecAnyR :: (Int -> RewriteH CoreDef) -> RewriteH CoreExpr -> RewriteH CoreExpr
- letRecOneR :: (Int -> RewriteH CoreDef) -> RewriteH CoreExpr -> RewriteH CoreExpr
- letRecDefT :: (Int -> TranslateH CoreExpr a1) -> TranslateH CoreExpr a2 -> ([(Id, a1)] -> a2 -> b) -> TranslateH CoreExpr b
- letRecDefAllR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreExpr -> RewriteH CoreExpr
- letRecDefAnyR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreExpr -> RewriteH CoreExpr
- letRecDefOneR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreExpr -> RewriteH CoreExpr
- consNonRecT :: TranslateH CoreExpr a1 -> TranslateH CoreProg a2 -> (Var -> a1 -> a2 -> b) -> TranslateH CoreProg b
- consNonRecAllR :: RewriteH CoreExpr -> RewriteH CoreProg -> RewriteH CoreProg
- consNonRecAnyR :: RewriteH CoreExpr -> RewriteH CoreProg -> RewriteH CoreProg
- consNonRecOneR :: RewriteH CoreExpr -> RewriteH CoreProg -> RewriteH CoreProg
- consRecT :: (Int -> TranslateH CoreDef a1) -> TranslateH CoreProg a2 -> ([a1] -> a2 -> b) -> TranslateH CoreProg b
- consRecAllR :: (Int -> RewriteH CoreDef) -> RewriteH CoreProg -> RewriteH CoreProg
- consRecAnyR :: (Int -> RewriteH CoreDef) -> RewriteH CoreProg -> RewriteH CoreProg
- consRecOneR :: (Int -> RewriteH CoreDef) -> RewriteH CoreProg -> RewriteH CoreProg
- consRecDefT :: (Int -> TranslateH CoreExpr a1) -> TranslateH CoreProg a2 -> ([(Id, a1)] -> a2 -> b) -> TranslateH CoreProg b
- consRecDefAllR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreProg -> RewriteH CoreProg
- consRecDefAnyR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreProg -> RewriteH CoreProg
- consRecDefOneR :: (Int -> RewriteH CoreExpr) -> RewriteH CoreProg -> RewriteH CoreProg
- caseAltT :: TranslateH CoreExpr a1 -> (Int -> TranslateH CoreExpr a2) -> (a1 -> Id -> Type -> [(AltCon, [Id], a2)] -> b) -> TranslateH CoreExpr b
- caseAltAllR :: RewriteH CoreExpr -> (Int -> RewriteH CoreExpr) -> RewriteH CoreExpr
- caseAltAnyR :: RewriteH CoreExpr -> (Int -> RewriteH CoreExpr) -> RewriteH CoreExpr
- caseAltOneR :: RewriteH CoreExpr -> (Int -> RewriteH CoreExpr) -> RewriteH CoreExpr
- promoteModGutsR :: RewriteH ModGuts -> RewriteH Core
- promoteProgR :: RewriteH CoreProg -> RewriteH Core
- promoteBindR :: RewriteH CoreBind -> RewriteH Core
- promoteDefR :: RewriteH CoreDef -> RewriteH Core
- promoteExprR :: RewriteH CoreExpr -> RewriteH Core
- promoteAltR :: RewriteH CoreAlt -> RewriteH Core
- promoteModGutsT :: TranslateH ModGuts b -> TranslateH Core b
- promoteProgT :: TranslateH CoreProg b -> TranslateH Core b
- promoteBindT :: TranslateH CoreBind b -> TranslateH Core b
- promoteDefT :: TranslateH CoreDef b -> TranslateH Core b
- promoteExprT :: TranslateH CoreExpr b -> TranslateH Core b
- promoteAltT :: TranslateH CoreAlt b -> TranslateH Core b
KURE Modules
All the required functionality of KURE is exported here, so other modules do not need to import KURE directly.
module Language.KURE
module Language.KURE.Injection
data KureM a
KureM is a basic error Monad.
The KURE user is free to either use KureM or provide their own monad.
KureM is essentially the same as (Either String a), except that the fail method produces an error in the monad,
rather than invoking error.
A major advantage of this is that monadic pattern match failures are caught safely.
fromKureM :: (String -> a) -> KureM a -> a
Get the value from a KureM, providing a function to handle the error case.
Synonyms
type TranslateH a b = Translate HermitC HermitM a bSource
A synonym for the identity rewrite. Convienient to avoid importing Control.Category.
Congruence combinators
Modguts
modGutsT :: TranslateH CoreProg a -> (ModGuts -> a -> b) -> TranslateH ModGuts bSource
Translate a module. Slightly different to the other congruence combinators: it passes in *all* of the original to the reconstruction function.
Program
progNilT :: b -> TranslateH CoreProg bSource
Translate an empty list.
progConsT :: TranslateH CoreBind a1 -> TranslateH CoreProg a2 -> (a1 -> a2 -> b) -> TranslateH CoreProg bSource
Binding Groups
nonRecT :: TranslateH CoreExpr a -> (Var -> a -> b) -> TranslateH CoreBind bSource
recT :: (Int -> TranslateH CoreDef a) -> ([a] -> b) -> TranslateH CoreBind bSource
Translate a binding group of the form: Rec [CoreDef]
recAllR :: (Int -> RewriteH CoreDef) -> RewriteH CoreBindSource
Rewrite all children of a binding group of the form: Rec [CoreDef]
recAnyR :: (Int -> RewriteH CoreDef) -> RewriteH CoreBindSource
Rewrite any children of a binding group of the form: Rec [CoreDef]
recOneR :: (Int -> RewriteH CoreDef) -> RewriteH CoreBindSource
Rewrite one child of a binding group of the form: Rec [CoreDef]
Recursive Definitions
defT :: TranslateH CoreExpr a -> (Id -> a -> b) -> TranslateH CoreDef bSource
Case Alternatives
altT :: TranslateH CoreExpr a -> (AltCon -> [Id] -> a -> b) -> TranslateH CoreAlt bSource
Expressions
litT :: (Literal -> b) -> TranslateH CoreExpr bSource
Translate an expression of the form: Lit Literal
appT :: TranslateH CoreExpr a1 -> TranslateH CoreExpr a2 -> (a1 -> a2 -> b) -> TranslateH CoreExpr bSource
lamT :: TranslateH CoreExpr a -> (Var -> a -> b) -> TranslateH CoreExpr bSource
letT :: TranslateH CoreBind a1 -> TranslateH CoreExpr a2 -> (a1 -> a2 -> b) -> TranslateH CoreExpr bSource
caseT :: TranslateH CoreExpr a1 -> (Int -> TranslateH CoreAlt a2) -> (a1 -> Id -> Type -> [a2] -> b) -> TranslateH CoreExpr bSource
castT :: TranslateH CoreExpr a -> (a -> Coercion -> b) -> TranslateH CoreExpr bSource
tickT :: TranslateH CoreExpr a -> (CoreTickish -> a -> b) -> TranslateH CoreExpr bSource
Translate an expression of the form: Tick CoreTickish CoreExpr
tickR :: RewriteH CoreExpr -> RewriteH CoreExprSource
Rewrite the CoreExpr child of an expression of the form: Tick CoreTickish CoreExpr
coercionT :: (Coercion -> b) -> TranslateH CoreExpr bSource
Translate an expression of the form: Coercion Coercion
Composite Congruence Combinators
recDefT :: (Int -> TranslateH CoreExpr a1) -> ([(Id, a1)] -> b) -> TranslateH CoreBind bSource
letNonRecT :: TranslateH CoreExpr a1 -> TranslateH CoreExpr a2 -> (Var -> a1 -> a2 -> b) -> TranslateH CoreExpr bSource
letRecT :: (Int -> TranslateH CoreDef a1) -> TranslateH CoreExpr a2 -> ([a1] -> a2 -> b) -> TranslateH CoreExpr bSource
letRecDefT :: (Int -> TranslateH CoreExpr a1) -> TranslateH CoreExpr a2 -> ([(Id, a1)] -> a2 -> b) -> TranslateH CoreExpr bSource
consNonRecT :: TranslateH CoreExpr a1 -> TranslateH CoreProg a2 -> (Var -> a1 -> a2 -> b) -> TranslateH CoreProg bSource
consRecT :: (Int -> TranslateH CoreDef a1) -> TranslateH CoreProg a2 -> ([a1] -> a2 -> b) -> TranslateH CoreProg bSource
consRecDefT :: (Int -> TranslateH CoreExpr a1) -> TranslateH CoreProg a2 -> ([(Id, a1)] -> a2 -> b) -> TranslateH CoreProg bSource
caseAltT :: TranslateH CoreExpr a1 -> (Int -> TranslateH CoreExpr a2) -> (a1 -> Id -> Type -> [(AltCon, [Id], a2)] -> b) -> TranslateH CoreExpr bSource
Promotion Combinators
Rewrite Promotions
Translate Promotions
promoteModGutsT :: TranslateH ModGuts b -> TranslateH Core bSource
promoteProgT :: TranslateH CoreProg b -> TranslateH Core bSource
promoteBindT :: TranslateH CoreBind b -> TranslateH Core bSource
promoteDefT :: TranslateH CoreDef b -> TranslateH Core bSource
promoteExprT :: TranslateH CoreExpr b -> TranslateH Core bSource
promoteAltT :: TranslateH CoreAlt b -> TranslateH Core bSource