module SSTG.Core.Language.Syntax
( module SSTG.Core.Language.Syntax
) where
newtype Program = Program [Binds] deriving (Show, Eq, Read)
data NameSpace = VarNSpace | DataNSpace | TvNSpace | TcClsNSpace
deriving (Show, Eq, Read, Ord)
data Name = Name String (Maybe String) NameSpace Int
deriving (Show, Eq, Read, Ord)
data Var = Var Name Type deriving (Show, Eq, Read)
data Lit = MachChar Char Type
| MachStr String Type
| MachInt Int Type
| MachWord Int Type
| MachFloat Rational Type
| MachDouble Rational Type
| MachLabel String (Maybe Int) Type
| MachNullAddr Type
| BlankAddr
| AddrLit Int
| LitEval PrimFun [Lit]
deriving (Show, Eq, Read)
data Atom = LitAtom Lit
| VarAtom Var
deriving (Show, Eq, Read)
data PrimFun = PrimFun Name Type deriving (Show, Eq, Read)
data Expr = Atom Atom
| PrimApp PrimFun [Atom]
| ConApp DataCon [Atom]
| FunApp Var [Atom]
| Let Binds Expr
| Case Expr Var [Alt]
deriving (Show, Eq, Read)
data Alt = Alt AltCon Expr deriving (Show, Eq, Read)
data AltCon = DataAlt DataCon [Var]
| LitAlt Lit
| Default
deriving (Show, Eq, Read)
data Binds = Binds RecForm [(Var, BindRhs)] deriving (Show, Eq, Read)
data RecForm = Rec | NonRec deriving (Show, Eq, Read)
data BindRhs = ConForm DataCon [Atom]
| FunForm [Var] Expr
deriving (Show, Eq, Read)
data DataCon = DataCon Name Type [Type] deriving (Show, Eq, Read)
data Type = TyVarTy Var
| AppTy Type Type
| ForAllTy TyBinder Type
| CastTy Type Coercion
| TyConApp TyCon [Type]
| CoercionTy Coercion
| LitTy TyLit
| FunTy Type Type
| Bottom
deriving (Show, Eq, Read)
data TyBinder = NamedTyBndr Name
| AnonTyBndr
deriving (Show, Eq, Read)
data TyLit = NumTyLit Int
| StrTyLit String
deriving (Show, Eq, Read)
data Coercion = Coercion Type Type deriving (Show, Eq, Read)
data TyCon = FunTyCon Name [TyBinder]
| AlgTyCon Name [Name] AlgTyRhs
| SynonymTyCon Name [Name]
| FamilyTyCon Name [Name]
| PrimTyCon Name [TyBinder]
| Promoted Name [TyBinder] DataCon
deriving (Show, Eq, Read)
data AlgTyRhs = AbstractTyCon Bool
| DataTyCon [Name]
| NewTyCon Name
| TupleTyCon Name
deriving (Show, Eq, Read)