on 0ca86e4 help sign in
elk/src/Types/Types.hs
34 lines 798 B history raw
2module Types where
4import Data.List (intercalate)
5import qualified Data.Set as Set
7type X = Int
9data Type = IntT
10 | StringT
11 | CharT
12 | BoolT
13 | LambdaT Type Type
14 | VarT X
15 | AppT String [Type]
16 | ADT String [Type]
17 deriving (Eq, Ord)
19data Scheme = Forall (Set.Set X) Type deriving (Eq, Ord, Show)
21data Constructor = Constructor String [Type] deriving (Eq, Show)
23instance Show Type where
24 show t =
25 case t of
26 { IntT -> "Int"
27 ; StringT -> "String"
28 ; CharT -> "Char"
29 ; BoolT -> "Bool"
30 ; LambdaT t1 t2 -> show t1 ++ " -> " ++ show t2
31 ; VarT x -> show x
32 ; AppT name args -> name ++ " " ++ unwords (map show args)
33 ; ADT name constrs -> name
34 }