on master help sign in
Switch all of the AST modules from String to Text
commitc0b4375304435d259ef9f208515ff9e02bf64bcc authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 30 Nov 2016, 16:32 (10 years ago) parent5ce2c7f
9 files changed+135−109
src/AST/Expression/Canonical.hs+14−12 src/AST/Expression/Optimized.hs+14−12 src/AST/Expression/Source.hs+17−10 src/AST/Helpers.hs+15−15 src/AST/Literal.hs+2−1 src/AST/Module/Name.hs+6−2 src/AST/Pattern.hs+26−27 src/AST/Type.hs+15−11 src/AST/Variable.hs+26−19
src/AST/Expression/Canonical.hs+14−12
@@ -1,4 +1,5 @@
11{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
23module AST.Expression.Canonical
34 ( Expr, Expr'(..)
45 , Main(..)
@@ -10,7 +11,8 @@ module AST.Expression.Canonical
1011 where
1112
1213
13−import qualified Data.List as List
14+import qualified Data.Text as Text
15+import Data.Text (Text)
1416
1517import qualified AST.Effects as Effects
1618import qualified AST.Literal as Literal
@@ -40,18 +42,18 @@ data Expr'
4042 | If [(Expr, Expr)] Expr
4143 | Let [Def] Expr
4244 | Case Expr [(Ptrn.Canonical, Expr)]
43− | Ctor String [Expr]
44− | Access Expr String
45− | Update Expr [(String, Expr)]
46− | Record [(String, Expr)]
45+ | Ctor Text [Expr]
46+ | Access Expr Text
47+ | Update Expr [(Text, Expr)]
48+ | Record [(Text, Expr)]
4749 -- for type checking and code gen only
4850 | Cmd ModuleName.Canonical
4951 | Sub ModuleName.Canonical
50− | OutgoingPort String Type.Canonical
51− | IncomingPort String Type.Canonical
52+ | OutgoingPort Text Type.Canonical
53+ | IncomingPort Text Type.Canonical
5254 | Program Main Expr
5355 | SaveEnv ModuleName.Canonical Effects.Canonical
54− | GLShader String String Literal.GLShaderTipe
56+ | GLShader Text Text Literal.GLShaderTipe
5557
5658
5759data Main
@@ -109,7 +111,7 @@ defCons def@(Def _ (A.A _ pattern) _ _) sortedDefs =
109111-- HELPERS
110112
111113
112−localVar :: String -> Expr'
114+localVar :: Text -> Expr'
113115localVar x =
114116 Var (Var.Canonical Var.Local x)
115117
@@ -128,16 +130,16 @@ collectApps annExpr@(A.A _ expr) =
128130
129131
130132
131−collectFields :: Expr -> Maybe String
133+collectFields :: Expr -> Maybe Text
132134collectFields expr =
133135 collectFieldsHelp expr []
134136
135137
136−collectFieldsHelp :: Expr -> [String] -> Maybe String
138+collectFieldsHelp :: Expr -> [Text] -> Maybe Text
137139collectFieldsHelp (A.A _ expr) fields =
138140 case expr of
139141 Var var ->
140− Just (List.intercalate "." (Var.toString var : fields))
142+ Just (Text.intercalate "." (Text.pack (Var.toString var) : fields))
141143
142144 Access record field ->
143145 collectFieldsHelp record (field : fields)
src/AST/Expression/Optimized.hs+14−12
@@ -5,6 +5,8 @@ module AST.Expression.Optimized
55 , Decider(..), Choice(..)
66 ) where
77
8+import Data.Text (Text)
9+
810import qualified AST.Expression.Canonical as Can
911import qualified AST.Literal as Literal
1012import qualified AST.Module.Name as ModuleName
@@ -18,8 +20,8 @@ import qualified Reporting.Region as R
1820-- DEFINITIONS
1921
2022data Def
21− = Def Facts String Expr
22− | TailDef Facts String [String] Expr
23+ = Def Facts Text Expr
24+ | TailDef Facts Text [Text] Expr
2325
2426
2527data Facts = Facts
@@ -39,23 +41,23 @@ data Expr
3941 | Var Var.Canonical
4042 | List [Expr]
4143 | Binop Var.Canonical Expr Expr
42− | Function [String] Expr
44+ | Function [Text] Expr
4345 | Call Expr [Expr]
44− | TailCall String [String] [Expr]
46+ | TailCall Text [Text] [Expr]
4547 | If [(Expr, Expr)] Expr
4648 | Let [Def] Expr
47− | Case String (Decider Choice) [(Int, Expr)]
48− | Ctor String [Expr]
49+ | Case Text (Decider Choice) [(Int, Expr)]
50+ | Ctor Text [Expr]
4951 | CtorAccess Expr Int
50− | Access Expr String
51− | Update Expr [(String, Expr)]
52− | Record [(String, Expr)]
52+ | Access Expr Text
53+ | Update Expr [(Text, Expr)]
54+ | Record [(Text, Expr)]
5355 | Cmd ModuleName.Canonical
5456 | Sub ModuleName.Canonical
55− | OutgoingPort String Type.Canonical
56− | IncomingPort String Type.Canonical
57+ | OutgoingPort Text Type.Canonical
58+ | IncomingPort Text Type.Canonical
5759 | Program Can.Main Expr
58− | GLShader String String Literal.GLShaderTipe
60+ | GLShader Text Text Literal.GLShaderTipe
5961 | Crash ModuleName.Canonical R.Region (Maybe Expr)
6062
6163
src/AST/Expression/Source.hs+17−10
@@ -3,10 +3,12 @@ module AST.Expression.Source
33 ( RawExpr, RawExpr', RawDef, RawDef'(..)
44 , ValidExpr, ValidExpr', ValidDef(..)
55 , Expr, Expr'(..)
6− , var, tuple, getPattern, collectLambdas
6+ , var, tuple, zero, getPattern, collectLambdas
77 )
88 where
99
10+import qualified Data.Text as Text
11+import Data.Text (Text)
1012
1113import qualified AST.Literal as Literal
1214import qualified AST.Pattern as Ptrn
@@ -28,17 +30,17 @@ data Expr' def
2830 = Literal Literal.Literal
2931 | Var Var.Raw
3032 | List [Expr def]
31− | Binop [(Expr def, A.Located String)] (Expr def)
33+ | Binop [(Expr def, A.Located Text)] (Expr def)
3234 | Lambda Ptrn.Raw (Expr def)
3335 | App (Expr def) (Expr def)
3436 | If [(Expr def, Expr def)] (Expr def)
3537 | Let [def] (Expr def)
3638 | Case (Expr def) [(Ptrn.Raw, Expr def)]
37− | Ctor String [Expr def]
38− | Access (Expr def) String
39− | Update (Expr def) [(A.Located String, Expr def)]
40− | Record [(A.Located String, Expr def)]
41− | GLShader String String Literal.GLShaderTipe
39+ | Ctor Text [Expr def]
40+ | Access (Expr def) Text
41+ | Update (Expr def) [(A.Located Text, Expr def)]
42+ | Record [(A.Located Text, Expr def)]
43+ | GLShader Text Text Literal.GLShaderTipe
4244
4345
4446type RawExpr = Expr RawDef
@@ -60,7 +62,7 @@ type RawDef =
6062
6163data RawDef'
6264 = Definition Ptrn.Raw RawExpr
63− | Annotation String Type.Raw
65+ | Annotation Text Type.Raw
6466
6567
6668data ValidDef =
@@ -71,14 +73,19 @@ data ValidDef =
7173-- HELPERS
7274
7375
74−var :: String -> Expr' def
76+var :: Text -> Expr' def
7577var x =
7678 Var (Var.Raw x)
7779
7880
7981tuple :: [Expr def] -> Expr' def
8082tuple expressions =
81− Ctor ("_Tuple" ++ show (length expressions)) expressions
83+ Ctor (Text.pack ("_Tuple" ++ show (length expressions))) expressions
84+
85+
86+zero :: Expr' def
87+zero =
88+ Literal (Literal.IntNum 0)
8289
8390
8491getPattern :: ValidDef -> Ptrn.Raw
src/AST/Helpers.hs+15−15
@@ -1,32 +1,32 @@
11{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
23module AST.Helpers where
34
45import qualified Data.Char as Char
6+import qualified Data.Text as Text
7+import Data.Text (Text)
58
69
710
8−splitDots :: String -> [String]
9−splitDots variable =
10− go [] variable
11− where
12− go vars str =
13− case break (=='.') str of
14− (x,_:rest) | isOp x -> vars ++ [x ++ '.' : rest]
15− | otherwise -> go (vars ++ [x]) rest
16− (x,[]) -> vars ++ [x]
11+-- TUPLES
1712
1813
19−isTuple :: String -> Bool
14+isTuple :: Text -> Bool
2015isTuple name =
21− take 6 name == "_Tuple"
22− && all Char.isDigit (drop 6 name)
16+ Text.isPrefixOf "_Tuple" name
17+ &&
18+ Text.all Char.isDigit (Text.drop 6 name)
2319
2420
25−isOp :: String -> Bool
21+
22+-- INFIX OPERATORS
23+
24+
25+isOp :: Text -> Bool
2626isOp name =
27− all isSymbol name
27+ Text.all isSymbol name
2828
2929
3030isSymbol :: Char -> Bool
3131isSymbol c =
32− c /= '`' && (Char.isSymbol c || elem c "+-/*=.$<>:&|^?%#@~!")
32+ elem c ("+-/*=.<>:&|^?%#@~!" :: String)
src/AST/Literal.hs+2−1
@@ -2,13 +2,14 @@
22module AST.Literal where
33
44import qualified Data.Map as Map
5+import Data.Text (Text)
56
67
78data Literal
89 = IntNum Int
910 | FloatNum Double
1011 | Chr Char
11− | Str String
12+ | Str Text
1213 | Boolean Bool
1314 deriving (Eq, Ord)
1415
src/AST/Module/Name.hs+6−2
@@ -1,12 +1,16 @@
1+{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
13module AST.Module.Name where
24
35import Data.Binary
46import qualified Data.List as List
7+import qualified Data.Text as Text
8+import Data.Text (Text)
59
610import qualified Elm.Package as Package
711
812
9−type Raw = [String] -- must be non-empty
13+type Raw = [Text] -- must be non-empty
1014
1115
1216data Canonical = Canonical
@@ -33,7 +37,7 @@ inHtml raw =
3337
3438toString :: Raw -> String
3539toString rawName =
36− List.intercalate "." rawName
40+ List.intercalate "." (map Text.unpack rawName)
3741
3842
3943canonicalToString :: Canonical -> String
src/AST/Pattern.hs+26−27
@@ -1,8 +1,11 @@
11{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
23module AST.Pattern where
34
45import qualified Data.List as List
56import qualified Data.Set as Set
7+import qualified Data.Text as Text
8+import Data.Text (Text)
69
710import qualified AST.Literal as L
811import qualified AST.Variable as Var
@@ -15,10 +18,10 @@ type Pattern ann var =
1518
1619
1720data Pattern' ann var
18− = Data var [Pattern ann var]
19− | Record [String]
20− | Alias String (Pattern ann var)
21− | Var String
21+ = Ctor var [Pattern ann var]
22+ | Record [Text]
23+ | Alias Text (Pattern ann var)
24+ | Var Text
2225 | Anything
2326 | Literal L.Literal
2427
@@ -35,7 +38,7 @@ type Canonical =
3538 Pattern R.Region Var.Canonical
3639
3740
38−isVar :: String -> Pattern ann var -> Bool
41+isVar :: Text -> Pattern ann var -> Bool
3942isVar name (A.A _ pattern) =
4043 case pattern of
4144 Var pName ->
@@ -49,30 +52,26 @@ list :: R.Position -> [Raw] -> Raw
4952list end patterns =
5053 case patterns of
5154 [] ->
52− A.at end end (Data (Var.Raw "[]") [])
55+ A.at end end (Ctor (Var.Raw "[]") [])
5356
5457 pattern@(A.A (R.Region start _) _) : rest ->
55− A.at start end (Data (Var.Raw "::") [pattern, list end rest])
56−
57−
58−consMany :: R.Position -> [Raw] -> Raw
59−consMany end patterns =
60− let cons hd@(A.A (R.Region start _) _) tl =
61− A.at start end (Data (Var.Raw "::") [hd, tl])
62− in
63− foldr1 cons patterns
58+ A.at start end (Ctor (Var.Raw "::") [pattern, list end rest])
6459
6560
6661tuple :: [Raw] -> Raw'
6762tuple patterns =
68− Data (Var.Raw ("_Tuple" ++ show (length patterns))) patterns
63+ let
64+ name =
65+ Text.append "_Tuple" (Text.pack (show (length patterns)))
66+ in
67+ Ctor (Var.Raw name) patterns
6968
7069
7170
7271-- FIND VARIABLES
7372
7473
75−boundVars :: Pattern ann var -> [A.Annotated ann String]
74+boundVars :: Pattern ann var -> [A.Annotated ann Text]
7675boundVars (A.A ann pattern) =
7776 case pattern of
7877 Var x ->
@@ -81,7 +80,7 @@ boundVars (A.A ann pattern) =
8180 Alias name realPattern ->
8281 A.A ann name : boundVars realPattern
8382
84− Data _ patterns ->
83+ Ctor _ patterns ->
8584 concatMap boundVars patterns
8685
8786 Record fields ->
@@ -94,17 +93,17 @@ boundVars (A.A ann pattern) =
9493 []
9594
9695
97−member :: String -> Pattern ann var -> Bool
96+member :: Text -> Pattern ann var -> Bool
9897member name pattern =
99− any (name==) (map A.drop (boundVars pattern))
98+ elem name (map A.drop (boundVars pattern))
10099
101100
102−boundVarSet :: Pattern ann var -> Set.Set String
101+boundVarSet :: Pattern ann var -> Set.Set Text
103102boundVarSet pattern =
104103 Set.fromList (map A.drop (boundVars pattern))
105104
106105
107−boundVarList :: Pattern ann var -> [String]
106+boundVarList :: Pattern ann var -> [Text]
108107boundVarList pattern =
109108 Set.toList (boundVarSet pattern)
110109
@@ -117,15 +116,15 @@ toString :: Bool -> Canonical -> String
117116toString needsParens (A.A _ pattern) =
118117 case pattern of
119118 Var name ->
120− name
119+ Text.unpack name
121120
122− Data name [] ->
121+ Ctor name [] ->
123122 if Var.isTuple name then
124123 "()"
125124 else
126125 Var.toString name
127126
128− Data name args ->
127+ Ctor name args ->
129128 if Var.isTuple name then
130129 "( " ++ List.intercalate ", " (map (toString False) args) ++ " )"
131130 else
@@ -133,11 +132,11 @@ toString needsParens (A.A _ pattern) =
133132 Var.toString name ++ concatMap ((" "++) . toString True) args
134133
135134 Record fields ->
136− "{" ++ List.intercalate "," fields ++ "}"
135+ "{" ++ List.intercalate "," (map Text.unpack fields) ++ "}"
137136
138137 Alias alias subPattern ->
139138 parensIf needsParens $
140− toString False subPattern ++ " as " ++ alias
139+ toString False subPattern ++ " as " ++ Text.unpack alias
141140
142141 Anything ->
143142 "_"
src/AST/Type.hs+15−11
@@ -1,3 +1,5 @@
1+{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
13module AST.Type
24 ( Raw, Raw'(..)
35 , Canonical(..), Aliased(..)
@@ -10,6 +12,8 @@ module AST.Type
1012import Control.Arrow (second)
1113import Data.Binary
1214import qualified Data.Map as Map
15+import qualified Data.Text as Text
16+import Data.Text (Text)
1317
1418import qualified AST.Module.Name as ModuleName
1519import qualified AST.Variable as Var
@@ -27,19 +31,19 @@ type Raw =
2731
2832data Raw'
2933 = RLambda Raw Raw
30− | RVar String
34+ | RVar Text
3135 | RType Var.Raw
3236 | RApp Raw [Raw]
33− | RRecord [(A.Located String, Raw)] (Maybe Raw)
37+ | RRecord [(A.Located Text, Raw)] (Maybe Raw)
3438
3539
3640data Canonical
3741 = Lambda Canonical Canonical
38− | Var String
42+ | Var Text
3943 | Type Var.Canonical
4044 | App Canonical [Canonical]
41− | Record [(String, Canonical)] (Maybe Canonical)
42− | Aliased Var.Canonical [(String, Canonical)] (Aliased Canonical)
45+ | Record [(Text, Canonical)] (Maybe Canonical)
46+ | Aliased Var.Canonical [(Text, Canonical)] (Aliased Canonical)
4347 deriving (Eq, Ord)
4448
4549
@@ -57,22 +61,22 @@ tuple :: R.Region -> [Raw] -> Raw
5761tuple region types =
5862 let
5963 name =
60− Var.Raw ("_Tuple" ++ show (length types))
64+ Var.Raw (Text.append "_Tuple" (Text.pack (show (length types))))
6165 in
6266 A.A region (RApp (A.A region (RType name)) types)
6367
6468
65−cmd :: ModuleName.Canonical -> String -> Canonical
69+cmd :: ModuleName.Canonical -> Text -> Canonical
6670cmd =
6771 effect Var.cmd
6872
6973
70−sub :: ModuleName.Canonical -> String -> Canonical
74+sub :: ModuleName.Canonical -> Text -> Canonical
7175sub =
7276 effect Var.sub
7377
7478
75−effect :: Var.Canonical -> ModuleName.Canonical -> String -> Canonical
79+effect :: Var.Canonical -> ModuleName.Canonical -> Text -> Canonical
7680effect effectName moduleName tipe =
7781 Lambda
7882 (App (Type (Var.fromModule moduleName tipe)) [Var "msg"])
@@ -115,7 +119,7 @@ iteratedDealias tipe =
115119 tipe
116120
117121
118−dealias :: [(String, Canonical)] -> Aliased Canonical -> Canonical
122+dealias :: [(Text, Canonical)] -> Aliased Canonical -> Canonical
119123dealias args aliasType =
120124 case aliasType of
121125 Holey tipe ->
@@ -125,7 +129,7 @@ dealias args aliasType =
125129 tipe
126130
127131
128−dealiasHelp :: Map.Map String Canonical -> Canonical -> Canonical
132+dealiasHelp :: Map.Map Text Canonical -> Canonical -> Canonical
129133dealiasHelp typeTable tipe =
130134 let
131135 go =
src/AST/Variable.hs+26−19
@@ -1,7 +1,11 @@
1+{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
13module AST.Variable where
24
35import Data.Binary
46import qualified Data.Maybe as Maybe
7+import qualified Data.Text as Text
8+import Data.Text (Text)
59
610import qualified AST.Helpers as Help
711import qualified AST.Module.Name as ModuleName
@@ -11,7 +15,7 @@ import qualified AST.Module.Name as ModuleName
1115-- RAW NAMES
1216
1317
14−newtype Raw = Raw String
18+newtype Raw = Raw Text
1519 deriving (Eq, Ord)
1620
1721
@@ -28,38 +32,38 @@ data Home
2832
2933
3034data Canonical = Canonical
31− { home :: !Home
32− , name :: !String
35+ { _home :: !Home
36+ , _name :: !Text
3337 }
3438 deriving (Eq, Ord)
3539
3640
37−local :: String -> Canonical
41+local :: Text -> Canonical
3842local x =
3943 Canonical Local x
4044
4145
42−topLevel :: ModuleName.Canonical -> String -> Canonical
46+topLevel :: ModuleName.Canonical -> Text -> Canonical
4347topLevel home x =
4448 Canonical (TopLevel home) x
4549
4650
47−builtin :: String -> Canonical
51+builtin :: Text -> Canonical
4852builtin x =
4953 Canonical BuiltIn x
5054
5155
52−fromModule :: ModuleName.Canonical -> String -> Canonical
56+fromModule :: ModuleName.Canonical -> Text -> Canonical
5357fromModule home name =
5458 Canonical (Module home) name
5559
5660
57−inCore :: ModuleName.Raw -> String -> Canonical
61+inCore :: ModuleName.Raw -> Text -> Canonical
5862inCore home name =
5963 Canonical (Module (ModuleName.inCore home)) name
6064
6165
62−inHtml :: ModuleName.Raw -> String -> Canonical
66+inHtml :: ModuleName.Raw -> Text -> Canonical
6367inHtml home name =
6468 Canonical (Module (ModuleName.inHtml home)) name
6569
@@ -94,7 +98,7 @@ isLocalHome home =
9498 True
9599
96100
97−is :: ModuleName.Raw -> String -> Canonical -> Bool
101+is :: ModuleName.Raw -> Text -> Canonical -> Bool
98102is home name var =
99103 var == inCore home name
100104
@@ -126,8 +130,11 @@ isList v =
126130isTuple :: Canonical -> Bool
127131isTuple v =
128132 case v of
129− Canonical BuiltIn name -> Help.isTuple name
130− _ -> False
133+ Canonical BuiltIn name ->
134+ Help.isTuple name
135+
136+ _ ->
137+ False
131138
132139
133140isPrimitive :: Canonical -> Bool
@@ -139,7 +146,7 @@ isPrimitive v =
139146 False
140147
141148
142−isPrim :: String -> Canonical -> Bool
149+isPrim :: Text -> Canonical -> Bool
143150isPrim prim (Canonical home name) =
144151 case home of
145152 BuiltIn ->
@@ -149,7 +156,7 @@ isPrim prim (Canonical home name) =
149156 False
150157
151158
152−isLocal :: (String -> Bool) -> Canonical -> Bool
159+isLocal :: (Text -> Bool) -> Canonical -> Bool
153160isLocal check (Canonical home name) =
154161 case home of
155162 Local ->
@@ -169,23 +176,23 @@ class ToString a where
169176
170177instance ToString Raw where
171178 toString (Raw name) =
172− name
179+ Text.unpack name
173180
174181
175182instance ToString Canonical where
176183 toString (Canonical home name) =
177184 case home of
178185 BuiltIn ->
179− name
186+ Text.unpack name
180187
181188 Module moduleName ->
182− ModuleName.canonicalToString moduleName ++ "." ++ name
189+ ModuleName.canonicalToString moduleName ++ "." ++ Text.unpack name
183190
184191 TopLevel _ ->
185− name
192+ Text.unpack name
186193
187194 Local ->
188− name
195+ Text.unpack name
189196
190197
191198