on master help sign in
Prettier printing for infix operator definitions
8ffcf9eEvan Czaplicki
compiler/Compiler.hs+2−2
@@ -22,7 +22,7 @@ import Generate.JavaScript (jsModule)
22import Generate.Html (createHtml, JSStyle(..), JSSource(..))
22import Generate.Html (createHtml, JSStyle(..), JSSource(..))
23import Paths_Elm
23import Paths_Elm
24
24
25−import SourceSyntax.PrettyPrint (pretty)
25+import SourceSyntax.PrettyPrint (pretty, variable)
26import Text.PrettyPrint as P
26import Text.PrettyPrint as P
27import qualified Type.Type as Type
27import qualified Type.Type as Type
28import qualified Parse.Type as Parse
28import qualified Parse.Type as Parse
@@ -134,7 +134,7 @@ printTypes metaModule = do
134 putStrLn ""
134 putStrLn ""
135 forM_ (Map.toList $ types metaModule) $ \(n,t) -> do
135 forM_ (Map.toList $ types metaModule) $ \(n,t) -> do
136 pt <- Type.extraPretty t
136 pt <- Type.extraPretty t
137− print $ P.text n <+> P.text ":" <+> pt
137+ print $ variable n <+> P.text ":" <+> pt
138 putStrLn ""
138 putStrLn ""
139
139
140getRuntime :: Flags -> IO FilePath
140getRuntime :: Flags -> IO FilePath
compiler/SourceSyntax/Expression.hs+2−2
@@ -52,7 +52,7 @@ instance Pretty (Expr t v) where
52 pretty expr =
52 pretty expr =
53 case expr of
53 case expr of
54 Literal lit -> pretty lit
54 Literal lit -> pretty lit
55− Var x -> parensIf (Help.isOp x) (P.text x)
55+ Var x -> variable x
56 Range e1 e2 -> P.brackets (pretty e1 <> P.text ".." <> pretty e2)
56 Range e1 e2 -> P.brackets (pretty e1 <> P.text ".." <> pretty e2)
57 ExplicitList es -> P.brackets (commaCat (map pretty es))
57 ExplicitList es -> P.brackets (commaCat (map pretty es))
58 Binop op e1 e2 -> P.sep [ prettyParens e1 <+> P.text op, prettyParens e2 ]
58 Binop op e1 e2 -> P.sep [ prettyParens e1 <+> P.text op, prettyParens e2 ]
@@ -99,7 +99,7 @@ instance Pretty (Def t v) where
99 pretty def =
99 pretty def =
100 case def of
100 case def of
101 TypeAnnotation name tipe ->
101 TypeAnnotation name tipe ->
102− P.text name <+> P.text ":" <+> pretty tipe
102+ variable name <+> P.text ":" <+> pretty tipe
103 Def pattern expr ->
103 Def pattern expr ->
104 pretty pattern <+> P.text "=" <+> pretty expr
104 pretty pattern <+> P.text "=" <+> pretty expr
105
105
compiler/SourceSyntax/Pattern.hs+2−2
@@ -3,7 +3,7 @@ module SourceSyntax.Pattern where
3
3
4import Data.List (intercalate)
4import Data.List (intercalate)
5import Data.Data
5import Data.Data
6−import SourceSyntax.Helpers
6+import SourceSyntax.Helpers as Help
7import SourceSyntax.PrettyPrint
7import SourceSyntax.PrettyPrint
8import Text.PrettyPrint as PP
8import Text.PrettyPrint as PP
9import SourceSyntax.Literal as Literal
9import SourceSyntax.Literal as Literal
@@ -25,7 +25,7 @@ tuple es = PData ("_Tuple" ++ show (length es)) es
25instance Pretty Pattern where
25instance Pretty Pattern where
26 pretty pattern =
26 pretty pattern =
27 case pattern of
27 case pattern of
28− PVar x -> PP.text x
28+ PVar x -> variable x
29 PLiteral lit -> pretty lit
29 PLiteral lit -> pretty lit
30 PRecord fs -> PP.braces (commaCat $ map PP.text fs)
30 PRecord fs -> PP.braces (commaCat $ map PP.text fs)
31 PAlias x p -> prettyParens p <+> PP.text "as" <+> PP.text x
31 PAlias x p -> prettyParens p <+> PP.text "as" <+> PP.text x
compiler/SourceSyntax/PrettyPrint.hs+4−1
@@ -3,6 +3,7 @@ module SourceSyntax.PrettyPrint where
3
3
4import Text.PrettyPrint
4import Text.PrettyPrint
5import SourceSyntax.Location
5import SourceSyntax.Location
6+import qualified SourceSyntax.Helpers as Help
6
7
7class Pretty a where
8class Pretty a where
8 pretty :: a -> Doc
9 pretty :: a -> Doc
@@ -16,4 +17,6 @@ instance Pretty () where
16commaCat docs = cat (punctuate comma docs)
17commaCat docs = cat (punctuate comma docs)
17commaSep docs = sep (punctuate comma docs)
18commaSep docs = sep (punctuate comma docs)
18
19
19−parensIf bool doc = if bool then parens doc else doc
20+parensIf bool doc = if bool then parens doc else doc
21+
22+variable x = parensIf (Help.isOp x) (text x)
compiler/Type/Inference.hs+1−1
@@ -56,7 +56,7 @@ infer interfaces' modul = unsafePerformIO $ do
56 environ = T.CLet [ T.Scheme vars [] T.CTrue header ]
56 environ = T.CLet [ T.Scheme vars [] T.CTrue header ]
57
57
58 constraint <- environ `fmap` TcExpr.constrain env (program modul) (T.VarN var)
58 constraint <- environ `fmap` TcExpr.constrain env (program modul) (T.VarN var)
59− print =<< T.extraPretty constraint
59+ --print =<< T.extraPretty constraint
60
60
61 state <- execStateT (Solve.solve constraint) TS.initialState
61 state <- execStateT (Solve.solve constraint) TS.initialState
62 let errors = TS.sErrors state
62 let errors = TS.sErrors state