on master help sign in
Remove special syntax for lists in types
ee72256Evan Czaplicki
src/AST/Type.hs+1−5
@@ -29,7 +29,7 @@ recordOf :: [(String, Type var)] -> Type var
29recordOf fields = Record fields Nothing
29recordOf fields = Record fields Nothing
30
30
31listOf :: RawType -> RawType
31listOf :: RawType -> RawType
32−listOf t = App (Type (Var.Raw "_List")) [t]
32+listOf t = App (Type (Var.Raw "List")) [t]
33
33
34tupleOf :: [RawType] -> RawType
34tupleOf :: [RawType] -> RawType
35tupleOf ts = App (Type t) ts
35tupleOf ts = App (Type t) ts
@@ -54,9 +54,6 @@ instance (Var.ToString var, Pretty var) => Pretty (Type var) where
54
54
55 App f args ->
55 App f args ->
56 case (f,args) of
56 case (f,args) of
57− (Type name, [t])
58− | Var.toString name == "_List" -> P.brackets (pretty t)
59−
60 (Type name, _)
57 (Type name, _)
61 | Help.isTuple (Var.toString name) ->
58 | Help.isTuple (Var.toString name) ->
62 P.parens . P.sep . P.punctuate P.comma $ map pretty args
59 P.parens . P.sep . P.punctuate P.comma $ map pretty args
@@ -93,7 +90,6 @@ prettyParens tipe = parensIf (needed tipe) (pretty tipe)
93
90
94 Lambda _ _ -> True
91 Lambda _ _ -> True
95
92
96− App (Type name) [_] | Var.toString name == "_List" -> False
97 App (Type name) _ | Help.isTuple (Var.toString name) -> False
93 App (Type name) _ | Help.isTuple (Var.toString name) -> False
98 App t' [] -> needed t'
94 App t' [] -> needed t'
99 App _ _ -> True
95 App _ _ -> True
src/AST/Variable.hs+1−1
@@ -64,7 +64,7 @@ isSignal =
64
64
65isList :: Canonical -> Bool
65isList :: Canonical -> Bool
66isList v =
66isList v =
67− v == Canonical BuiltIn "_List"
67+ v == Canonical BuiltIn "List"
68
68
69
69
70isTuple :: Canonical -> Bool
70isTuple :: Canonical -> Bool
src/Parse/Type.hs+1−3
@@ -12,8 +12,6 @@ import Parse.Helpers
12tvar :: IParser T.RawType
12tvar :: IParser T.RawType
13tvar = T.Var <$> lowVar <?> "type variable"
13tvar = T.Var <$> lowVar <?> "type variable"
14
14
15−list :: IParser T.RawType
16−list = T.listOf <$> braces expr
17
15
18tuple :: IParser T.RawType
16tuple :: IParser T.RawType
19tuple = do ts <- parens (commaSep expr)
17tuple = do ts <- parens (commaSep expr)
@@ -50,7 +48,7 @@ constructor0 =
50 return (T.Type (Var.Raw name))
48 return (T.Type (Var.Raw name))
51
49
52term :: IParser T.RawType
50term :: IParser T.RawType
53−term = list <|> tuple <|> record <|> tvar <|> constructor0
51+term = tuple <|> record <|> tvar <|> constructor0
54
52
55app :: IParser T.RawType
53app :: IParser T.RawType
56app =
54app =
src/Transform/Canonicalize/Environment.hs+1−1
@@ -65,7 +65,7 @@ builtIns :: Module.Name -> Environment
65builtIns home =
65builtIns home =
66 Env { _home = home
66 Env { _home = home
67 , _values = builtIn (tuples ++ [saveEnvName])
67 , _values = builtIn (tuples ++ [saveEnvName])
68− , _adts = builtIn (tuples ++ ["_List","Int","Float","Char","Bool","String"])
68+ , _adts = builtIn (tuples ++ ["List","Int","Float","Char","Bool","String"])
69 , _aliases = dict []
69 , _aliases = dict []
70 , _patterns = builtIn (tuples ++ ["::","[]"])
70 , _patterns = builtIn (tuples ++ ["::","[]"])
71 }
71 }
src/Type/Constrain/Expression.hs+1−1
@@ -23,7 +23,7 @@ import qualified Type.Constrain.Pattern as Pattern
23constrain :: Env.Environment -> Canonical.Expr -> Type
23constrain :: Env.Environment -> Canonical.Expr -> Type
24 -> ErrorT [PP.Doc] IO TypeConstraint
24 -> ErrorT [PP.Doc] IO TypeConstraint
25constrain env (A region expr) tipe =
25constrain env (A region expr) tipe =
26− let list t = Env.get env Env.types "_List" <| t
26+ let list t = Env.get env Env.types "List" <| t
27 and = A region . CAnd
27 and = A region . CAnd
28 true = A region CTrue
28 true = A region CTrue
29 t1 === t2 = A region (CEqual t1 t2)
29 t1 === t2 = A region (CEqual t1 t2)
src/Type/Environment.hs+2−2
@@ -52,7 +52,7 @@ makeTypes datatypes =
52
52
53 builtins :: [(String, Int)]
53 builtins :: [(String, Int)]
54 builtins = concat [ map tuple [0..9]
54 builtins = concat [ map tuple [0..9]
55− , kind 1 ["_List"]
55+ , kind 1 ["List"]
56 , kind 0 ["Int","Float","Char","String","Bool"]
56 , kind 0 ["Int","Float","Char","String","Bool"]
57 ]
57 ]
58 where
58 where
@@ -66,7 +66,7 @@ makeConstructors :: Environment
66 -> Map.Map String (IO (Int, [Variable], [Type], Type))
66 -> Map.Map String (IO (Int, [Variable], [Type], Type))
67makeConstructors env datatypes = Map.fromList builtins
67makeConstructors env datatypes = Map.fromList builtins
68 where
68 where
69− list t = (types env Map.! "_List") <| t
69+ list t = (types env Map.! "List") <| t
70
70
71 inst :: Int -> ([Type] -> ([Type], Type)) -> IO (Int, [Variable], [Type], Type)
71 inst :: Int -> ([Type] -> ([Type], Type)) -> IO (Int, [Variable], [Type], Type)
72 inst numTVars tipe = do
72 inst numTVars tipe = do
src/Type/Type.hs+2−2
@@ -171,8 +171,8 @@ instance PrettyType a => PrettyType (Term1 a) where
171 pretty when term =
171 pretty when term =
172 let prty = pretty Never in
172 let prty = pretty Never in
173 case term of
173 case term of
174− App1 f x | P.render px == "_List" -> P.brackets (pretty Never x)
174+ App1 f x ->
175− | otherwise -> parensIf needed (px <+> pretty App x)
175+ parensIf needed (px <+> pretty App x)
176 where
176 where
177 px = prty f
177 px = prty f
178 needed = case when of
178 needed = case when of