on master help sign in
Preserve type variable names from ports
074467fEvan Czaplicki
compiler/src/Type/Constrain/Module.hs+3−3
@@ -16,7 +16,7 @@ import qualified Reporting.Error.Type as E
16import qualified Reporting.Region as R
16import qualified Reporting.Region as R
17import qualified Type.Constrain.Expression as Expr
17import qualified Type.Constrain.Expression as Expr
18import qualified Type.Instantiate as Instantiate
18import qualified Type.Instantiate as Instantiate
19−import Type.Type (Type(..), Constraint(..), (==>), mkFlexVar, never)
19+import Type.Type (Type(..), Constraint(..), (==>), mkFlexVar, nameToRigid, never)
20
20
21
21
22
22
@@ -73,13 +73,13 @@ letPort :: N.Name -> Can.Port -> IO Constraint -> IO Constraint
73letPort name port_ makeConstraint =
73letPort name port_ makeConstraint =
74 case port_ of
74 case port_ of
75 Can.Incoming freeVars _ srcType ->
75 Can.Incoming freeVars _ srcType ->
76− do vars <- traverse (\_ -> mkFlexVar) freeVars
76+ do vars <- Map.traverseWithKey (\k _ -> nameToRigid k) freeVars
77 tipe <- Instantiate.fromSrcType (Map.map VarN vars) srcType
77 tipe <- Instantiate.fromSrcType (Map.map VarN vars) srcType
78 let header = Map.singleton name (A.At R.zero tipe)
78 let header = Map.singleton name (A.At R.zero tipe)
79 CLet (Map.elems vars) [] header CTrue <$> makeConstraint
79 CLet (Map.elems vars) [] header CTrue <$> makeConstraint
80
80
81 Can.Outgoing freeVars _ srcType ->
81 Can.Outgoing freeVars _ srcType ->
82− do vars <- traverse (\_ -> mkFlexVar) freeVars
82+ do vars <- Map.traverseWithKey (\k _ -> nameToRigid k) freeVars
83 tipe <- Instantiate.fromSrcType (Map.map VarN vars) srcType
83 tipe <- Instantiate.fromSrcType (Map.map VarN vars) srcType
84 let header = Map.singleton name (A.At R.zero tipe)
84 let header = Map.singleton name (A.At R.zero tipe)
85 CLet (Map.elems vars) [] header CTrue <$> makeConstraint
85 CLet (Map.elems vars) [] header CTrue <$> makeConstraint