fix bug in unification
[fp.git] / src / HM / Term.hs
1 -- |
2 -- Module      :  HM.Term
3 -- Copyright   :  Tomáš Musil 2014
4 -- License     :  BSD-3
5 --
6 -- Maintainer  :  tomik.musil@gmail.com
7 -- Stability   :  experimental
8 --
9 -- Data types for Hindley-Milner terms.
10
11 module HM.Term
12   ( -- * Types
13     Literal(..)
14   , VarName
15   , TypeVarName
16   , TypeName
17   , Term(..)
18   , TypedTerm(..)
19   , Type(..)
20   , TypeScheme(..)
21   , PrimOp(..)
22   ) where
23
24 type VarName = String
25 type TypeVarName = String
26 type TypeName = String
27
28 data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type deriving (Eq)
29 data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme deriving (Eq)
30
31 data Term = Var VarName | Lam VarName TypedTerm | App TypedTerm TypedTerm | Let VarName TypedTerm TypedTerm | Lit Literal
32 data TypedTerm = NTTerm Term | TTerm Term TypeScheme
33 data Literal = LInt Integer | LBool Bool | LFunc PrimOp deriving (Eq)
34
35 data PrimOp = If deriving (Eq, Show)