on 5ba2f27 help sign in
elk/src/Types/Types.hs
38 lines 956 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)
23parens = ("("++) . (++")")
25instance Show Type where
26 show t =
27 case t of
28 { IntT -> "Int"
29 ; StringT -> "String"
30 ; CharT -> "Char"
31 ; BoolT -> "Bool"
32 ; LambdaT t1 t2 -> parens $ show t1 ++ " -> " ++ show t2
33 ; VarT x -> show x
34 ; AppT name args -> name ++ " " ++ unwords (map show args)
35 ; ADT "List" [tipe] -> "[" ++ show tipe ++ "]"
36 ; ADT name [] -> name
37 ; ADT name cs -> parens $ name ++ " " ++ unwords (map show cs)
38 }