datafix-0.0.0.1: examples/Analyses/Syntax/MkCoreHelpers.hs
module Analyses.Syntax.MkCoreHelpers where
import CoreSyn
import FastString
import Id
import Literal
import MkCore
import Type
import TysWiredIn
import Unique
mkTestId :: Int -> String -> Type -> Id
mkTestId i s = mkSysLocal (mkFastString s) (mkBuiltinUnique i)
mkTestIds :: [(String, Type)] -> [Id]
mkTestIds = zipWith (\i (s, t) -> mkTestId i s t) [0..]
int :: Type
int = intTy
bool :: Type
bool = boolTy
int2int :: Type
int2int = mkFunTys [int] int
int2int2int :: Type
int2int2int = mkFunTys [int, int] int
bool2int2int :: Type
bool2int2int = mkFunTys [bool, int] int
letrec :: Id -> CoreExpr -> CoreExpr -> CoreExpr
letrec id_ rhs = mkCoreLet (Rec [(id_, rhs)])
lam :: Id -> CoreExpr -> CoreExpr
lam = Lam
var :: Id -> CoreExpr
var = Var
ite :: CoreExpr -> CoreExpr -> CoreExpr -> CoreExpr
ite = mkIfThenElse
($$) :: CoreExpr -> CoreExpr -> CoreExpr
f $$ a = App f a
intLit :: Integer -> CoreExpr
intLit i = Lit (mkLitInteger i int)
boolLit :: Bool -> CoreExpr
boolLit True = Var trueDataConId
boolLit False = Var falseDataConId