projekty
/
fp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
some work on HM interpreter
[fp.git]
/
src
/
HM
/
Term.hs
diff --git
a/src/HM/Term.hs
b/src/HM/Term.hs
index
cf4cf36
..
fc705af
100644
(file)
--- a/
src/HM/Term.hs
+++ b/
src/HM/Term.hs
@@
-10,13
+10,15
@@
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)