@@ -44,17 +44,28 @@ fromCanonicalPattern (A.A _ pattern) =
45-- TO STRING
45-- TO STRING
47−toString :: Pattern -> String
47+toString :: Bool -> Pattern -> String
48−toString pattern =
48+toString needsParens pattern =
49 case pattern of
49 case pattern of
50+ Data tag [first,rest] | Var.toString tag == "::" ->
51+ toString (isCons first) first
53+ ++ toString False rest
50 Data tag args ->
55 Data tag args ->
56+ if Var.isTuple tag then
57+ "(" ++ List.intercalate ", " (map (toString False) args) ++ ")"
60+ addParensIf (needsParens && not (null args)) $
51− List.intercalate " " (Var.toString tag : map toString args)
61+ List.intercalate " " (Var.toString tag : map (toString True) args)
53 Record fields ->
63 Record fields ->
54 "{ " ++ List.intercalate ", " fields ++ " }"
64 "{ " ++ List.intercalate ", " fields ++ " }"
56 Alias alias realPattern ->
66 Alias alias realPattern ->
67+ addParensIf needsParens $
57− toString realPattern ++ " as " ++ alias
68+ toString False realPattern ++ " as " ++ alias
59 Var name ->
70 Var name ->
@@ -66,6 +77,23 @@ toString pattern =
66 L.toString literal
77 L.toString literal
68 AnythingBut literalSet ->
79 AnythingBut literalSet ->
69− List.intercalate " " ("<values besides:" : map L.toString (Set.toList literalSet))
80+ List.intercalate " " ("<values besides:" : map L.toString (Set.toList literalSet) ++ [">"])
83+addParensIf :: Bool -> String -> String
84+addParensIf needsParens str =
92+isCons :: Pattern -> Bool
96+ Var.toString tag == "::"