HM type inference
[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     VarName
14   , TypeVarName
15   , TypeName
16   , Term(..)
17   , TypedTerm(..)
18   , Type(..)
19   , TypeScheme(..)
20   ) where
21
22 type VarName = String
23 type TypeVarName = String
24 type TypeName = String
25
26 data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type deriving (Eq)
27 data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme deriving (Eq)
28
29 data Term = Var VarName | Lam VarName TypedTerm | App TypedTerm TypedTerm | Let VarName TypedTerm TypedTerm
30 data TypedTerm = NTTerm Term | TTerm Term TypeScheme