--- /dev/null
+-- |
+-- Module : HM.Term
+-- Copyright : Tomáš Musil 2014
+-- License : BSD-3
+--
+-- Maintainer : tomik.musil@gmail.com
+-- Stability : experimental
+--
+-- Data types for Hindley-Milner terms.
+
+module HM.Term
+ ( -- * Types
+ VarName
+ , TypeVarName
+ , TypeName
+ , Term(..)
+ , TypedTerm(..)
+ , Type(..)
+ , TypeScheme(..)
+ ) 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 Term = Var VarName | Lam VarName TypedTerm | App TypedTerm TypedTerm | Let VarName TypedTerm TypedTerm
+data TypedTerm = NTTerm Term | TTerm Term TypeScheme