on master help sign in
Fix how types are converted to strings. This actually fixes some bugs that come from generating docs.json, which led to incorrect types being used in the compiler.
530bc6eevancz
compiler/Gen/CompileToJS.hs+1−1
@@ -315,7 +315,7 @@ clauseToJS span var (Clause name vars e) = do
315jsNil = "_L.Nil"
315jsNil = "_L.Nil"
316jsCons e1 e2 = "_L.Cons(" ++ e1 ++ "," ++ e2 ++ ")"
316jsCons e1 e2 = "_L.Cons(" ++ e1 ++ "," ++ e2 ++ ")"
317jsRange e1 e2 = "_L.range" ++ parens (e1 ++ "," ++ e2)
317jsRange e1 e2 = "_L.range" ++ parens (e1 ++ "," ++ e2)
318−jsCompare e1 e2 op = parens ("_N.compare(" ++ e1 ++ "," ++ e2 ++ ").ctor" ++ op)
318+jsCompare e1 e2 op = parens ("_N.cmp(" ++ e1 ++ "," ++ e2 ++ ").ctor" ++ op)
319
319
320binop (o:p) e1 e2
320binop (o:p) e1 e2
321 | isAlpha o || '_' == o = (o:p) ++ parens e1 ++ parens e2
321 | isAlpha o || '_' == o = (o:p) ++ parens e1 ++ parens e2
compiler/Types/Types.hs+5−6
@@ -68,19 +68,18 @@ parens = ("("++) . (++")")
68
68
69instance Show Type where
69instance Show Type where
70 show t =
70 show t =
71− let show' t = case t of { LambdaT _ _ -> parens (show t) ; _ -> show t }
71+ let addParens (c:cs) =
72+ if notElem ' ' cs || c == '(' then c:cs else parens (c:cs)
72 in case t of
73 in case t of
73− LambdaT t1@(LambdaT _ _) t2 -> show' t1 ++ " -> " ++ show t2
74+ LambdaT t1@(LambdaT _ _) t2 -> parens (show t1) ++ " -> " ++ show t2
74 LambdaT t1 t2 -> show t1 ++ " -> " ++ show t2
75 LambdaT t1 t2 -> show t1 ++ " -> " ++ show t2
75 VarT x -> 't' : show x
76 VarT x -> 't' : show x
76− --ADT "List" [ADT "Char" []] -> "String"
77+ ADT "List" [ADT "Char" []] -> "String"
77 ADT "List" [tipe] -> "[" ++ show tipe ++ "]"
78 ADT "List" [tipe] -> "[" ++ show tipe ++ "]"
78 ADT name cs ->
79 ADT name cs ->
79 if isTupleString name
80 if isTupleString name
80 then parens . intercalate "," $ map show cs
81 then parens . intercalate "," $ map show cs
81− else case cs of
82+ else name ++ concatMap ((' ':) . addParens . show) cs
82− [] -> name
83− _ -> name ++ " " ++ unwords (map show cs)
84 Super ts -> "{" ++ (intercalate "," . map show $ Set.toList ts) ++ "}"
83 Super ts -> "{" ++ (intercalate "," . map show $ Set.toList ts) ++ "}"
85 EmptyRecord -> "{}"
84 EmptyRecord -> "{}"
86 RecordT fs t ->
85 RecordT fs t ->