some work on HM interpreter
[fp.git] / src / HM / Term.hs
index cf4cf36..fc705af 100644 (file)
 
 module HM.Term
   ( -- * Types
 
 module HM.Term
   ( -- * Types
-    VarName
+    Literal(..)
+  , VarName
   , TypeVarName
   , TypeName
   , Term(..)
   , TypedTerm(..)
   , Type(..)
   , TypeScheme(..)
   , TypeVarName
   , TypeName
   , Term(..)
   , TypedTerm(..)
   , Type(..)
   , TypeScheme(..)
+  , PrimOp(..)
   ) where
 
 type VarName = String
   ) where
 
 type VarName = String
@@ -26,5 +28,8 @@ type TypeName = String
 data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type deriving (Eq)
 data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme deriving (Eq)
 
 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 TypedTerm = NTTerm Term | TTerm Term TypeScheme
+data Literal = LInt Integer | LBool Bool | LFunc PrimOp deriving (Eq)
+
+data PrimOp = If deriving (Eq, Show)