copilot-core-2.2.0: An intermediate representation for Copilot.

Safe HaskellSafe
LanguageHaskell2010

Copilot.Core.Expr

Synopsis

Documentation

type Id = Int Source

A stream identifier.

type Name = String Source

A name of a trigger, an external variable, or an external function.

data Expr a where Source

Constructors

Const :: Type a -> a -> Expr a 
Drop :: Type a -> DropIdx -> Id -> Expr a 
Local :: Type a -> Type b -> Name -> Expr a -> Expr b -> Expr b 
Var :: Type a -> Name -> Expr a 
ExternVar :: Type a -> Name -> Maybe [a] -> Expr a 
ExternFun :: Type a -> Name -> [UExpr] -> Maybe (Expr a) -> Maybe Tag -> Expr a 
ExternArray :: Integral a => Type a -> Type b -> Name -> Int -> Expr a -> Maybe [[b]] -> Maybe Tag -> Expr b 
ExternStruct :: Type a -> Name -> [(Name, UExpr)] -> Maybe Tag -> Expr a 
GetField :: Type a -> Type b -> Expr a -> Name -> Expr b 
Op1 :: Op1 a b -> Expr a -> Expr b 
Op2 :: Op2 a b c -> Expr a -> Expr b -> Expr c 
Op3 :: Op3 a b c d -> Expr a -> Expr b -> Expr c -> Expr d 
Label :: Type a -> String -> Expr a -> Expr a 

data UExpr Source

A untyped expression (no phantom type).

Constructors

forall a . UExpr 

Fields

uExprType :: Type a
 
uExprExpr :: Expr a
 

data SExpr Source

An expression for Struct args

Constructors

SExpr 

Fields

sname :: String
 
uexpr :: UExpr
 

type DropIdx = Word32 Source

An index for the drop operator.

type Tag = Int Source

A unique tag for external arrays/function calls.