on master help sign in
Rename Environment to Env in type inferencer
3b23d86Evan Czaplicki
src/Type/Constrain/Effects.hs+3−11
@@ -14,11 +14,7 @@ import Type.Type
14 )
14 )
15
15
16
16
17−constrain
18− :: Env.Environment
19− -> ModuleName.Canonical
17+constrain :: Env.Env -> ModuleName.Canonical -> Effects.Canonical -> IO TypeConstraint
20− -> Effects.Canonical
21− -> IO TypeConstraint
22constrain env moduleName effects =
18constrain env moduleName effects =
23 case effects of
19 case effects of
24 Effects.None ->
20 Effects.None ->
@@ -31,11 +27,7 @@ constrain env moduleName effects =
31 constrainHelp env moduleName info
27 constrainHelp env moduleName info
32
28
33
29
34−constrainHelp
35− :: Env.Environment
36− -> ModuleName.Canonical
30+constrainHelp :: Env.Env -> ModuleName.Canonical -> Effects.Info -> IO TypeConstraint
37− -> Effects.Info
38− -> IO TypeConstraint
39constrainHelp env moduleName (Effects.Info tagRegion r0 r1 r2 managerType) =
31constrainHelp env moduleName (Effects.Info tagRegion r0 r1 r2 managerType) =
40 let
32 let
41 task t =
33 task t =
@@ -87,7 +79,7 @@ constrainHelp env moduleName (Effects.Info tagRegion r0 r1 r2 managerType) =
87
79
88
80
89addEffectArgs
81addEffectArgs
90− :: Env.Environment
82+ :: Env.Env
91 -> ModuleName.Canonical
83 -> ModuleName.Canonical
92 -> Effects.ManagerType
84 -> Effects.ManagerType
93 -> Variable
85 -> Variable
src/Type/Constrain/Expression.hs+10−19
@@ -22,11 +22,7 @@ import Type.Type hiding (Descriptor(..))
22
22
23
23
24
24
25−constrain
26− :: Env.Environment
27− -> Canonical.Expr
28− -> Type
29− -> IO TypeConstraint
25+constrain :: Env.Env -> Canonical.Expr -> Type -> IO TypeConstraint
30constrain env annotatedExpr@(A.A region expression) tipe =
26constrain env annotatedExpr@(A.A region expression) tipe =
31 case expression of
27 case expression of
32 E.Literal lit ->
28 E.Literal lit ->
@@ -163,7 +159,7 @@ constrain env annotatedExpr@(A.A region expression) tipe =
163
159
164
160
165constrainApp
161constrainApp
166− :: Env.Environment
162+ :: Env.Env
167 -> R.Region
163 -> R.Region
168 -> Canonical.Expr
164 -> Canonical.Expr
169 -> [Canonical.Expr]
165 -> [Canonical.Expr]
@@ -192,7 +188,7 @@ constrainApp env region f args tipe =
192
188
193
189
194argConstraints
190argConstraints
195− :: Env.Environment
191+ :: Env.Env
196 -> Maybe V.Canonical
192 -> Maybe V.Canonical
197 -> R.Region
193 -> R.Region
198 -> Int
194 -> Int
@@ -246,7 +242,7 @@ argConstraints env name region totalArgs overallVar index args =
246
242
247
243
248constrainBinop
244constrainBinop
249− :: Env.Environment
245+ :: Env.Env
250 -> R.Region
246 -> R.Region
251 -> V.Canonical
247 -> V.Canonical
252 -> Canonical.Expr
248 -> Canonical.Expr
@@ -281,12 +277,7 @@ constrainBinop env region op leftExpr@(A.A leftRegion _) rightExpr@(A.A rightReg
281-- CONSTRAIN LISTS
277-- CONSTRAIN LISTS
282
278
283
279
284−constrainList
285− :: Env.Environment
286− -> R.Region
287− -> [Canonical.Expr]
288− -> Type
289− -> IO TypeConstraint
280+constrainList :: Env.Env -> R.Region -> [Canonical.Expr] -> Type -> IO TypeConstraint
290constrainList env region exprs tipe =
281constrainList env region exprs tipe =
291 do (exprInfo, exprCons) <-
282 do (exprInfo, exprCons) <-
292 unzip <$> mapM elementConstraint exprs
283 unzip <$> mapM elementConstraint exprs
@@ -309,7 +300,7 @@ constrainList env region exprs tipe =
309
300
310
301
311constrainIf
302constrainIf
312− :: Env.Environment
303+ :: Env.Env
313 -> R.Region
304 -> R.Region
314 -> [(Canonical.Expr, Canonical.Expr)]
305 -> [(Canonical.Expr, Canonical.Expr)]
315 -> Canonical.Expr
306 -> Canonical.Expr
@@ -368,7 +359,7 @@ constrainIf env region branches finally tipe =
368
359
369
360
370constrainCase
361constrainCase
371− :: Env.Environment
362+ :: Env.Env
372 -> R.Region
363 -> R.Region
373 -> Canonical.Expr
364 -> Canonical.Expr
374 -> [(P.Canonical, Canonical.Expr)]
365 -> [(P.Canonical, Canonical.Expr)]
@@ -498,7 +489,7 @@ data Info = Info
498 }
489 }
499
490
500
491
501−constrainDef :: Env.Environment -> Info -> Canonical.Def -> IO Info
492+constrainDef :: Env.Env -> Info -> Canonical.Def -> IO Info
502constrainDef env info (Canonical.Def _ (A.A patternRegion pattern) expr maybeTipe) =
493constrainDef env info (Canonical.Def _ (A.A patternRegion pattern) expr maybeTipe) =
503 let qs = [] -- should come from the def, but I'm not sure what would live there...
494 let qs = [] -- should come from the def, but I'm not sure what would live there...
504 in
495 in
@@ -514,7 +505,7 @@ constrainDef env info (Canonical.Def _ (A.A patternRegion pattern) expr maybeTip
514
505
515
506
516constrainUnannotatedDef
507constrainUnannotatedDef
517− :: Env.Environment
508+ :: Env.Env
518 -> Info
509 -> Info
519 -> [String]
510 -> [String]
520 -> R.Region
511 -> R.Region
@@ -542,7 +533,7 @@ constrainUnannotatedDef env info qs patternRegion name expr =
542
533
543
534
544constrainAnnotatedDef
535constrainAnnotatedDef
545− :: Env.Environment
536+ :: Env.Env
546 -> Info
537 -> Info
547 -> [String]
538 -> [String]
548 -> R.Region
539 -> R.Region
src/Type/Constrain/Literal.hs+1−6
@@ -7,12 +7,7 @@ import qualified Type.Type as T
7import qualified Type.Environment as Env
7import qualified Type.Environment as Env
8
8
9
9
10−constrain
11− :: Env.Environment
12− -> R.Region
13− -> L.Literal
14− -> T.Type
15− -> IO T.TypeConstraint
10+constrain :: Env.Env -> R.Region -> L.Literal -> T.Type -> IO T.TypeConstraint
16constrain env region literal tipe =
11constrain env region literal tipe =
17 do definiteType <- litType
12 do definiteType <- litType
18 return (T.CEqual (Error.Literal name) region definiteType tipe)
13 return (T.CEqual (Error.Literal name) region definiteType tipe)
src/Type/Constrain/Pattern.hs+1−1
@@ -55,7 +55,7 @@ infoToScheme (Info headers vars cons) =
55-- CONSTRAIN PATTERN
55-- CONSTRAIN PATTERN
56
56
57
57
58−constrain :: Env.Environment -> P.Canonical -> Type -> IO Info
58+constrain :: Env.Env -> P.Canonical -> Type -> IO Info
59constrain env (A.A region pattern) tipe =
59constrain env (A.A region pattern) tipe =
60 let
60 let
61 equal patternError leftType rightType =
61 equal patternError leftType rightType =
src/Type/Environment.hs+14−14
@@ -1,6 +1,6 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2module Type.Environment
2module Type.Environment
3− ( Environment
3+ ( Env
4 , initialize
4 , initialize
5 , getType, freshDataScheme, ctorNames
5 , getType, freshDataScheme, ctorNames
6 , addValues
6 , addValues
@@ -24,18 +24,18 @@ type TypeDict = Map.Map String Type
24type VarDict = Map.Map String Variable
24type VarDict = Map.Map String Variable
25
25
26
26
27−data Environment = Environment
27+data Env = Env
28 { _constructor :: Map.Map String (IO (Int, [Variable], [Type], Type))
28 { _constructor :: Map.Map String (IO (Int, [Variable], [Type], Type))
29 , _types :: TypeDict
29 , _types :: TypeDict
30 , _value :: TypeDict
30 , _value :: TypeDict
31 }
31 }
32
32
33
33
34−initialize :: [Module.CanonicalUnion] -> IO Environment
34+initialize :: [Module.CanonicalUnion] -> IO Env
35initialize datatypes =
35initialize datatypes =
36 do types <- makeTypes datatypes
36 do types <- makeTypes datatypes
37 let env =
37 let env =
38− Environment
38+ Env
39 { _constructor = Map.empty
39 { _constructor = Map.empty
40 , _value = Map.empty
40 , _value = Map.empty
41 , _types = types
41 , _types = types
@@ -72,7 +72,7 @@ makeTypes datatypes =
72
72
73
73
74makeConstructors
74makeConstructors
75− :: Environment
75+ :: Env
76 -> [Module.CanonicalUnion]
76 -> [Module.CanonicalUnion]
77 -> Map.Map String (IO (Int, [Variable], [Type], Type))
77 -> Map.Map String (IO (Int, [Variable], [Type], Type))
78makeConstructors env datatypes =
78makeConstructors env datatypes =
@@ -100,7 +100,7 @@ makeConstructors env datatypes =
100
100
101
101
102ctorToType
102ctorToType
103− :: Environment
103+ :: Env
104 -> (V.Canonical, Module.UnionInfo V.Canonical)
104 -> (V.Canonical, Module.UnionInfo V.Canonical)
105 -> [(String, IO (Int, [Variable], [Type], Type))]
105 -> [(String, IO (Int, [Variable], [Type], Type))]
106ctorToType env (name, (tvars, ctors)) =
106ctorToType env (name, (tvars, ctors)) =
@@ -123,24 +123,24 @@ ctorToType env (name, (tvars, ctors)) =
123-- ACCESS TYPES
123-- ACCESS TYPES
124
124
125
125
126−get :: (Environment -> Map.Map String a) -> Environment -> String -> a
126+get :: (Env -> Map.Map String a) -> Env -> String -> a
127get subDict env key =
127get subDict env key =
128 Map.findWithDefault (error msg) key (subDict env)
128 Map.findWithDefault (error msg) key (subDict env)
129 where
129 where
130 msg = "Could not find type constructor `" ++ key ++ "` while checking types."
130 msg = "Could not find type constructor `" ++ key ++ "` while checking types."
131
131
132
132
133−getType :: Environment -> String -> Type
133+getType :: Env -> String -> Type
134getType =
134getType =
135 get _types
135 get _types
136
136
137
137
138−freshDataScheme :: Environment -> String -> IO (Int, [Variable], [Type], Type)
138+freshDataScheme :: Env -> String -> IO (Int, [Variable], [Type], Type)
139freshDataScheme =
139freshDataScheme =
140 get _constructor
140 get _constructor
141
141
142
142
143−ctorNames :: Environment -> [String]
143+ctorNames :: Env -> [String]
144ctorNames env =
144ctorNames env =
145 Map.keys (_constructor env)
145 Map.keys (_constructor env)
146
146
@@ -148,7 +148,7 @@ ctorNames env =
148-- UPDATE ENVIRONMENT
148-- UPDATE ENVIRONMENT
149
149
150
150
151−addValues :: Environment -> [(String, Variable)] -> Environment
151+addValues :: Env -> [(String, Variable)] -> Env
152addValues env newValues =
152addValues env newValues =
153 env
153 env
154 { _value =
154 { _value =
@@ -163,18 +163,18 @@ addValues env newValues =
163-- INSTANTIATE TYPES
163-- INSTANTIATE TYPES
164
164
165
165
166−instantiateType :: Environment -> T.Canonical -> VarDict -> IO ([Variable], Type)
166+instantiateType :: Env -> T.Canonical -> VarDict -> IO ([Variable], Type)
167instantiateType env sourceType dict =
167instantiateType env sourceType dict =
168 do (tipe, dict') <- State.runStateT (instantiator env sourceType) dict
168 do (tipe, dict') <- State.runStateT (instantiator env sourceType) dict
169 return (Map.elems dict', tipe)
169 return (Map.elems dict', tipe)
170
170
171
171
172−instantiator :: Environment -> T.Canonical -> State.StateT VarDict IO Type
172+instantiator :: Env -> T.Canonical -> State.StateT VarDict IO Type
173instantiator env sourceType =
173instantiator env sourceType =
174 instantiatorHelp env Set.empty sourceType
174 instantiatorHelp env Set.empty sourceType
175
175
176
176
177−instantiatorHelp :: Environment -> Set.Set String -> T.Canonical -> State.StateT VarDict IO Type
177+instantiatorHelp :: Env -> Set.Set String -> T.Canonical -> State.StateT VarDict IO Type
178instantiatorHelp env aliasVars sourceType =
178instantiatorHelp env aliasVars sourceType =
179 let
179 let
180 go =
180 go =
src/Type/Inference.hs+1−1
@@ -68,7 +68,7 @@ genConstraints interfaces modul =
68
68
69
69
70canonicalizeValues
70canonicalizeValues
71− :: Env.Environment
71+ :: Env.Env
72 -> (ModuleName.Canonical, Module.Interface)
72 -> (ModuleName.Canonical, Module.Interface)
73 -> IO [(String, ([T.Variable], T.Type))]
73 -> IO [(String, ([T.Variable], T.Type))]
74canonicalizeValues env (moduleName, iface) =
74canonicalizeValues env (moduleName, iface) =