module StrategoType where import Parentheses data Type = TVar (P String) | TConst (P String) | TTuple (P [Type]) | TInst (String,[Type]) | TArrow (Type, Type) | TApp (Type, Type) deriving (Show{-,Read-}) data DataDecl = DCons (String,[(Strictness,Type)]) deriving (Show{-,Read-}) data Strictness = Lazy | Strict deriving (Show{-,Read-}) tVar = TVar . P tConst = TConst . P tTuple = TTuple . P tApp = curry TApp tInst = curry TInst tarrow = curry TArrow tarrows ts t = foldr tarrow t ts dCons = curry DCons