on master help sign in
Fix type signature for record constructors
commit495313270867fda71e4837cc5c39d39eb89d12d9 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 29 Jan 2018, 14:16 (9 years ago) parent2c31662
4 files changed+21−12
src/AST/Canonical.hs+1−1 src/Canonicalize/Environment/Foreign.hs+12−4 src/Canonicalize/Environment/Local.hs+2−1 src/Optimize/Module.hs+6−6
src/AST/Canonical.hs+1−1
@@ -211,7 +211,7 @@ data Module =
211211 }
212212
213213
214−data Alias = Alias [N.Name] Type (Maybe [N.Name])
214+data Alias = Alias [N.Name] Type (Maybe [(N.Name,Type)])
215215data Binop = Binop_ Binop.Associativity Binop.Precedence N.Name
216216
217217
src/Canonicalize/Environment/Foreign.hs+12−4
@@ -140,16 +140,24 @@ unionToType home name union@(Can.Union vars ctors _ _) =
140140
141141
142142aliasToType :: ModuleName.Canonical -> N.Name -> Can.Alias -> (Env.Type, Env.Exposed Env.Ctor)
143−aliasToType home name (Can.Alias vars tipe maybeRecordArgs) =
143+aliasToType home name (Can.Alias vars tipe maybeRecordFields) =
144144 (
145145 Env.Alias (length vars) home vars tipe
146146 ,
147− case maybeRecordArgs of
147+ case maybeRecordFields of
148148 Nothing ->
149149 Map.empty
150150
151− Just _ ->
152− Map.singleton name (Map.singleton home (Env.RecordCtor home vars tipe))
151+ Just fields ->
152+ let
153+ avars = map (\var -> (var, Can.TVar var)) vars
154+ alias =
155+ foldr
156+ (\(_,t1) t2 -> Can.TLambda t1 t2)
157+ (Can.TAlias home name avars (Can.Filled tipe))
158+ fields
159+ in
160+ Map.singleton name (Map.singleton home (Env.RecordCtor home vars alias))
153161 )
154162
155163
src/Canonicalize/Environment/Local.hs+2−1
@@ -6,6 +6,7 @@ module Canonicalize.Environment.Local
66 where
77
88
9+import Control.Arrow (first)
910import Control.Monad (foldM)
1011import qualified Data.Graph as Graph
1112import qualified Data.List as List
@@ -299,7 +300,7 @@ canonicalizeAlias env@(Env.Env home _ _ _ _ _ _ _) (Valid.Alias (A.At region nam
299300 let recordType = Can.TRecord fieldDict Nothing
300301 let ctorType = foldr (Can.TLambda . snd) recordType cfields
301302 let vars = map A.toValue args
302− let alias = Can.Alias vars recordType (Just (map (A.toValue . fst) fields))
303+ let alias = Can.Alias vars recordType (Just (map (first A.toValue) cfields))
303304 let ctor = Env.RecordCtor home vars ctorType
304305
305306 Result.ok
src/Optimize/Module.hs+6−6
@@ -91,7 +91,7 @@ addAlias home name (Can.Alias _ _ maybeFields) graph@(Opt.Graph mains nodes fiel
9191 Just fields ->
9292 let
9393 function =
94− Opt.Function fields $ Opt.Record $
94+ Opt.Function (map fst fields) $ Opt.Record $
9595 Map.fromList $ map toPair fields
9696
9797 node =
@@ -100,16 +100,16 @@ addAlias home name (Can.Alias _ _ maybeFields) graph@(Opt.Graph mains nodes fiel
100100 Opt.Graph
101101 mains
102102 (Map.insert (Opt.Global home name) node nodes)
103− (foldr addOne fieldCounts fields)
103+ (foldr addRecordCtorField fieldCounts fields)
104104
105105
106−toPair :: N.Name -> (N.Name, Opt.Expr)
107−toPair field =
106+toPair :: (N.Name, Can.Type) -> (N.Name, Opt.Expr)
107+toPair (field, _) =
108108 ( field, Opt.VarLocal field )
109109
110110
111−addOne :: N.Name -> Map.Map N.Name Int -> Map.Map N.Name Int
112−addOne name fields =
111+addRecordCtorField :: (N.Name, Can.Type) -> Map.Map N.Name Int -> Map.Map N.Name Int
112+addRecordCtorField (name, _) fields =
113113 Map.insertWith (+) name 1 fields
114114
115115