on master help sign in
Make nested record types prettier.
commita7b0d3fa1520907216d2c90a53e3844b9c7680e2 authorEvan Czaplicki <info@elm-lang.org> dateTue 20 Aug 2013, 01:13 (13 years ago) parent40787a8
2 files changed+13−2
compiler/SourceSyntax/Type.hs+11−1 compiler/Type/State.hs+2−1
compiler/SourceSyntax/Type.hs+11−1
@@ -41,8 +41,11 @@ instance Pretty Type where
4141 | Help.isTuple name -> P.parens . P.sep . P.punctuate P.comma $ map pretty tipes
4242 | otherwise -> P.hang (P.text name) 2 (P.sep $ map prettyParens tipes)
4343 EmptyRecord -> P.braces P.empty
44− Record fields ext -> P.braces $ P.hang (pretty ext <+> P.text "|") 4 prettyFields
44+ Record _ _ -> P.braces $ case ext of
45+ EmptyRecord -> prettyFields
46+ _ -> P.hang (pretty ext <+> P.text "|") 4 prettyFields
4547 where
48+ (fields, ext) = collectRecords tipe
4649 prettyField (f,t) = P.text f <+> P.text ":" <+> pretty t
4750 prettyFields = commaSep . map prettyField $ fields
4851
@@ -52,6 +55,13 @@ collectLambdas tipe =
5255 Lambda arg body -> pretty arg : collectLambdas body
5356 _ -> [pretty tipe]
5457
58+collectRecords = go []
59+ where
60+ go fields tipe =
61+ case tipe of
62+ Record fs ext -> go (fs ++ fields) ext
63+ _ -> (fields, tipe)
64+
5565prettyParens tipe = parensIf needed (pretty tipe)
5666 where
5767 needed =
compiler/Type/State.hs+2−1
@@ -49,7 +49,8 @@ modifyPool f = modify $ \state -> state { sPool = f (sPool state) }
4949addError span message t1 t2 =
5050 modify $ \state -> state { sErrors = err : sErrors state }
5151 where
52− err = makeError <$> extraPretty t1 <*> extraPretty t2
52+ prty t = pretty `fmap` toSrcType t
53+ err = makeError <$> prty t1 <*> prty t2
5354
5455 location = case span of
5556 NoSpan msg -> ""