X-Git-Url: http://git.tomasm.cz/fp.git/blobdiff_plain/f9d54d61f2feba3f37c9e7c5f4ab87bf7b3e6166..94f9e5a83598d189b1dd90d4fec0927622a8b778:/src/HM/Term.hs diff --git a/src/HM/Term.hs b/src/HM/Term.hs index 0a686f9..fc705af 100644 --- a/src/HM/Term.hs +++ b/src/HM/Term.hs @@ -10,21 +10,26 @@ module HM.Term ( -- * Types - VarName + Literal(..) + , VarName , TypeVarName , TypeName , Term(..) , TypedTerm(..) , Type(..) , TypeScheme(..) + , PrimOp(..) ) where type VarName = String type TypeVarName = String type TypeName = String -data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type -data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme +data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type deriving (Eq) +data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme deriving (Eq) -data Term = Var VarName | Lam VarName TypedTerm | App TypedTerm TypedTerm | Let VarName TypedTerm TypedTerm +data Term = Var VarName | Lam VarName TypedTerm | App TypedTerm TypedTerm | Let VarName TypedTerm TypedTerm | Lit Literal data TypedTerm = NTTerm Term | TTerm Term TypeScheme +data Literal = LInt Integer | LBool Bool | LFunc PrimOp deriving (Eq) + +data PrimOp = If deriving (Eq, Show)