more work on Hindley-Milner
[fp.git] / src / HM / Term.hs
diff --git a/src/HM/Term.hs b/src/HM/Term.hs
new file mode 100644 (file)
index 0000000..0a686f9
--- /dev/null
@@ -0,0 +1,30 @@
+-- |
+-- 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