on master help sign in
Move all tuple name generation to AST.Helpers
befb3dfEvan Czaplicki
src/AST/Expression/Source.hs+2−2
@@ -7,9 +7,9 @@ module AST.Expression.Source
7 )
7 )
8 where
8 where
9
9
10−import qualified Data.Text as Text
11import Data.Text (Text)
10import Data.Text (Text)
12
11
12+import qualified AST.Helpers as Help
13import qualified AST.Literal as Literal
13import qualified AST.Literal as Literal
14import qualified AST.Pattern as Ptrn
14import qualified AST.Pattern as Ptrn
15import qualified AST.Type as Type
15import qualified AST.Type as Type
@@ -80,7 +80,7 @@ var x =
80
80
81tuple :: [Expr def] -> Expr' def
81tuple :: [Expr def] -> Expr' def
82tuple expressions =
82tuple expressions =
83− Ctor (Text.pack ("_Tuple" ++ show (length expressions))) expressions
83+ Ctor (Help.makeTuple (length expressions)) expressions
84
84
85
85
86zero :: Expr' def
86zero :: Expr' def
src/AST/Helpers.hs+18−1
@@ -1,6 +1,13 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3−module AST.Helpers (isTuple, isOp, isSymbol) where
3+module AST.Helpers
4+ ( zeroTuple
5+ , makeTuple
6+ , isTuple
7+ , isOp
8+ , isSymbol
9+ )
10+ where
4
11
5import qualified Data.Char as Char
12import qualified Data.Char as Char
6import qualified Data.Set as Set
13import qualified Data.Set as Set
@@ -12,6 +19,16 @@ import Data.Text (Text)
12-- TUPLES
19-- TUPLES
13
20
14
21
22+zeroTuple :: Text
23+zeroTuple =
24+ "_Tuple0"
25+
26+
27+makeTuple :: Int -> Text
28+makeTuple size =
29+ Text.pack ("_Tuple" ++ show size)
30+
31+
15isTuple :: Text -> Bool
32isTuple :: Text -> Bool
16isTuple name =
33isTuple name =
17 Text.isPrefixOf "_Tuple" name
34 Text.isPrefixOf "_Tuple" name
src/AST/Pattern.hs+2−2
@@ -6,10 +6,10 @@ import qualified Data.List as List
6import Data.Monoid ((<>))
6import Data.Monoid ((<>))
7import qualified Data.Set as Set
7import qualified Data.Set as Set
8import Data.Text (Text)
8import Data.Text (Text)
9−import qualified Data.Text as Text
10import qualified Data.Text.Lazy as LazyText
9import qualified Data.Text.Lazy as LazyText
11import Data.Text.Lazy.Builder (Builder, fromText, toLazyText)
10import Data.Text.Lazy.Builder (Builder, fromText, toLazyText)
12
11
12+import qualified AST.Helpers as Help
13import qualified AST.Literal as L
13import qualified AST.Literal as L
14import qualified AST.Variable as Var
14import qualified AST.Variable as Var
15import qualified Reporting.Annotation as A
15import qualified Reporting.Annotation as A
@@ -65,7 +65,7 @@ tuple :: [Raw] -> Raw'
65tuple patterns =
65tuple patterns =
66 let
66 let
67 name =
67 name =
68− Text.append "_Tuple" (Text.pack (show (length patterns)))
68+ Help.makeTuple (length patterns)
69 in
69 in
70 Ctor (Var.Raw name) patterns
70 Ctor (Var.Raw name) patterns
71
71
src/AST/Type.hs+2−2
@@ -13,9 +13,9 @@ import Control.Arrow (second)
13import Control.Monad (liftM, liftM2, liftM3)
13import Control.Monad (liftM, liftM2, liftM3)
14import Data.Binary
14import Data.Binary
15import qualified Data.Map as Map
15import qualified Data.Map as Map
16−import qualified Data.Text as Text
17import Data.Text (Text)
16import Data.Text (Text)
18
17
18+import qualified AST.Helpers as Help
19import qualified AST.Module.Name as ModuleName
19import qualified AST.Module.Name as ModuleName
20import qualified AST.Variable as Var
20import qualified AST.Variable as Var
21import qualified Reporting.Annotation as A
21import qualified Reporting.Annotation as A
@@ -62,7 +62,7 @@ tuple :: R.Region -> [Raw] -> Raw
62tuple region types =
62tuple region types =
63 let
63 let
64 name =
64 name =
65− Var.Raw (Text.append "_Tuple" (Text.pack (show (length types))))
65+ Var.Raw (Help.makeTuple (length types))
66 in
66 in
67 A.A region (RApp (A.A region (RType name)) types)
67 A.A region (RApp (A.A region (RType name)) types)
68
68
src/Canonicalize/Environment.hs+2−1
@@ -17,6 +17,7 @@ import qualified Data.Set as Set
17import qualified Data.Text as Text
17import qualified Data.Text as Text
18import Data.Text (Text)
18import Data.Text (Text)
19
19
20+import qualified AST.Helpers as Help
20import qualified AST.Declaration as Decl
21import qualified AST.Declaration as Decl
21import qualified AST.Module.Name as ModuleName
22import qualified AST.Module.Name as ModuleName
22import qualified AST.Pattern as P
23import qualified AST.Pattern as P
@@ -134,7 +135,7 @@ builtinPatches =
134
135
135 toTuple :: Int -> (Text, Int)
136 toTuple :: Int -> (Text, Int)
136 toTuple n =
137 toTuple n =
137− ( Text.pack ("_Tuple" ++ show n), n )
138+ ( Help.makeTuple n, n )
138
139
139
140
140
141
src/Elm/Compiler/Type.hs+4−3
@@ -14,7 +14,8 @@ module Elm.Compiler.Type
14import Control.Arrow ((***))
14import Control.Arrow ((***))
15import qualified Data.Text as Text
15import qualified Data.Text as Text
16import Data.Text (Text)
16import Data.Text (Text)
17−import Text.PrettyPrint as P
17+import qualified Text.PrettyPrint as P
18+import Text.PrettyPrint ((<+>))
18
19
19import qualified AST.Helpers as Help
20import qualified AST.Helpers as Help
20import qualified AST.Type as Type
21import qualified AST.Type as Type
@@ -88,10 +89,10 @@ toDoc context tipe =
88 P.text (Text.unpack name)
89 P.text (Text.unpack name)
89
90
90 Type name ->
91 Type name ->
91− P.text (Text.unpack (if name == "_Tuple0" then "()" else name))
92+ P.text (Text.unpack (if name == Help.zeroTuple then "()" else name))
92
93
93 App (Type name) args ->
94 App (Type name) args ->
94− if name == "_Tuple0" then
95+ if name == Help.zeroTuple then
95 P.text "()"
96 P.text "()"
96
97
97 else if Help.isTuple name then
98 else if Help.isTuple name then
src/Nitpick/PatternMatches.hs+1−1
@@ -423,7 +423,7 @@ makeTupleInfo :: Int -> ( Text, ArityInfo )
423makeTupleInfo n =
423makeTupleInfo n =
424 let
424 let
425 name =
425 name =
426− Text.pack ("_Tuple" ++ show n)
426+ Help.makeTuple n
427 in
427 in
428 ( name, ArityInfo 1 [ (Var.builtin name, n) ] )
428 ( name, ArityInfo 1 [ (Var.builtin name, n) ] )
429
429
src/Optimize/Port.hs+3−2
@@ -13,6 +13,7 @@ import qualified Data.Text as Text
13import Data.Text (Text)
13import Data.Text (Text)
14
14
15import qualified AST.Expression.Optimized as Opt
15import qualified AST.Expression.Optimized as Opt
16+import qualified AST.Helpers as Help
16import qualified AST.Literal as Literal
17import qualified AST.Literal as Literal
17import qualified AST.Module.Name as ModuleName
18import qualified AST.Module.Name as ModuleName
18import qualified AST.Type as T
19import qualified AST.Type as T
@@ -224,7 +225,7 @@ decodeArray tipe =
224decodeTuple0 :: Env.Optimizer Opt.Expr
225decodeTuple0 :: Env.Optimizer Opt.Expr
225decodeTuple0 =
226decodeTuple0 =
226 do null <- decode "null"
227 do null <- decode "null"
227− return (Opt.Call null [ Opt.Ctor "_Tuple0" [] ])
228+ return (Opt.Call null [ Opt.Ctor Help.zeroTuple [] ])
228
229
229
230
230decodeTuple :: [T.Canonical] -> Env.Optimizer Opt.Expr
231decodeTuple :: [T.Canonical] -> Env.Optimizer Opt.Expr
@@ -238,7 +239,7 @@ decodeTuple types =
238
239
239 tuple =
240 tuple =
240 Opt.Ctor
241 Opt.Ctor
241− (Text.pack ("_Tuple" ++ show size))
242+ (Help.makeTuple size)
242 (map (Opt.VarLocal . indexToName . fst) entries)
243 (map (Opt.VarLocal . indexToName . fst) entries)
243 in
244 in
244 do succeed <- decode "succeed"
245 do succeed <- decode "succeed"
src/Reporting/Render/Type.hs+1−1
@@ -93,7 +93,7 @@ varToDoc localizer var =
93 name =
93 name =
94 Var.toText var
94 Var.toText var
95 in
95 in
96− if name == "_Tuple0" then
96+ if name == Help.zeroTuple then
97 text "()"
97 text "()"
98
98
99 else
99 else
src/Type/Environment.hs+5−5
@@ -15,9 +15,9 @@ import qualified Control.Monad.State as State
15import qualified Data.List as List
15import qualified Data.List as List
16import qualified Data.Map as Map
16import qualified Data.Map as Map
17import qualified Data.Set as Set
17import qualified Data.Set as Set
18−import qualified Data.Text as Text
19import Data.Text (Text)
18import Data.Text (Text)
20
19
20+import qualified AST.Helpers as Help
21import qualified AST.Type as T
21import qualified AST.Type as T
22import qualified AST.Variable as Var
22import qualified AST.Variable as Var
23import qualified AST.Module as Module
23import qualified AST.Module as Module
@@ -86,7 +86,7 @@ builtinTypes =
86 , kind 0 ["Int","Float","Char","String","Bool"]
86 , kind 0 ["Int","Float","Char","String","Bool"]
87 ]
87 ]
88 where
88 where
89− tuple n = ( Text.pack ("_Tuple" ++ show n), n )
89+ tuple size = ( Help.makeTuple size, size )
90 kind n names = map (\name -> (name, n)) names
90 kind n names = map (\name -> (name, n)) names
91
91
92
92
@@ -106,12 +106,12 @@ makeCtors env unions =
106 let (args, result) = tipe (map (VarN) vars)
106 let (args, result) = tipe (map (VarN) vars)
107 return (length args, vars, args, result)
107 return (length args, vars, args, result)
108
108
109− tupleCtor n =
109+ tupleCtor size =
110 let
110 let
111 name =
111 name =
112− Text.pack ("_Tuple" ++ show n)
112+ Help.makeTuple size
113 in
113 in
114− (name, inst n $ \vs -> (vs, foldl (<|) (getType env name) vs))
114+ (name, inst size $ \vs -> (vs, foldl (<|) (getType env name) vs))
115
115
116 builtins :: Dict Instantiator
116 builtins :: Dict Instantiator
117 builtins =
117 builtins =