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
0a686f9
..
fc705af
100644
(file)
--- a/
src/HM/Term.hs
+++ b/
src/HM/Term.hs
@@
-10,21
+10,26
@@
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
type TypeVarName = String
type TypeName = String
) 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 TypedTerm = NTTerm Term | TTerm Term TypeScheme
+data Literal = LInt Integer | LBool Bool | LFunc PrimOp deriving (Eq)
+
+data PrimOp = If deriving (Eq, Show)