module Database.Ferry.TypedCore.Data.TypedCore where
import Database.Ferry.Common.Data.Base(Const)
import Database.Ferry.TypedCore.Data.Type
type Ident = String
data Op where
Op :: String -> Op
deriving (Show)
data CoreExpr where
BinOp :: (Qual FType) -> Op -> CoreExpr -> CoreExpr -> CoreExpr
Constant :: (Qual FType) -> Const -> CoreExpr
Var :: (Qual FType) -> String -> CoreExpr
App :: (Qual FType) -> CoreExpr -> Param -> CoreExpr
Let :: (Qual FType) -> String -> CoreExpr -> CoreExpr -> CoreExpr
Rec :: (Qual FType) -> [RecElem] -> CoreExpr
Cons :: (Qual FType) -> CoreExpr -> CoreExpr -> CoreExpr
Nil :: (Qual FType) -> CoreExpr
Elem :: (Qual FType) -> CoreExpr -> String -> CoreExpr
Table :: (Qual FType) -> String -> [Column] -> [Key] -> CoreExpr
If :: (Qual FType) -> CoreExpr -> CoreExpr -> CoreExpr -> CoreExpr
deriving (Show)
data RecElem where
RecElem :: (Qual FType) -> String -> CoreExpr -> RecElem
deriving (Show)
data Param where
ParExpr :: (Qual FType) -> CoreExpr -> Param
ParAbstr :: (Qual FType) -> [String] -> CoreExpr -> Param
deriving (Show)
data Column where
Column :: String -> FType -> Column
deriving (Show)
data Key where
Key :: [String] -> Key
deriving (Show)