on master help sign in
Separate out payload and overall type for ports

Payload type is needed to generate encoders and decoders, whereas the overall type is needed for type inference.

commite76858cb7a21c7511ad533160043a44aa6908595 authorEvan Czaplicki <evancz@users.noreply.github.com> dateFri 26 Jan 2018, 17:43 (9 years ago) parentc1aba2c
3 files changed+8−8
src/AST/Canonical.hs+2−2 src/Optimize/Module.hs+4−4 src/Type/Constrain/Module.hs+2−2
src/AST/Canonical.hs+2−2
@@ -275,8 +275,8 @@ data Effects
275275
276276
277277data Port
278− = Incoming FreeVars Type
279− | Outgoing FreeVars Type
278+ = Incoming { _freeVars :: FreeVars, _payload :: Type, _func :: Type }
279+ | Outgoing { _freeVars :: FreeVars, _payload :: Type, _func :: Type }
280280
281281
282282data Manager
src/Optimize/Module.hs+4−4
@@ -146,16 +146,16 @@ addEffects home effects graph@(Graph fields nodes) =
146146addPort :: ModuleName.Canonical -> N.Name -> Can.Port -> Graph -> Graph
147147addPort home name port_ graph =
148148 case port_ of
149− Can.Incoming _ tipe ->
149+ Can.Incoming _ payloadType _ ->
150150 let
151− (deps, fields, decoder) = Names.run (Port.toDecoder tipe)
151+ (deps, fields, decoder) = Names.run (Port.toDecoder payloadType)
152152 node = Opt.PortIncoming decoder deps
153153 in
154154 addToGraph (Opt.Global home name) node fields graph
155155
156− Can.Outgoing _ tipe ->
156+ Can.Outgoing _ payloadType _ ->
157157 let
158− (deps, fields, encoder) = Names.run (Port.toEncoder tipe)
158+ (deps, fields, encoder) = Names.run (Port.toEncoder payloadType)
159159 node = Opt.PortOutgoing encoder deps
160160 in
161161 addToGraph (Opt.Global home name) node fields graph
src/Type/Constrain/Module.hs+2−2
@@ -72,13 +72,13 @@ constrainDecls decls finalConstraint =
7272letPort :: N.Name -> Can.Port -> IO Constraint -> IO Constraint
7373letPort name port_ makeConstraint =
7474 case port_ of
75− Can.Incoming freeVars srcType ->
75+ Can.Incoming freeVars _ srcType ->
7676 do vars <- traverse (\_ -> mkFlexVar) freeVars
7777 tipe <- Instantiate.fromSrcType (Map.map VarN vars) srcType
7878 let header = Map.singleton name (A.At zero tipe)
7979 CLet (Map.elems vars) [] header CTrue <$> makeConstraint
8080
81− Can.Outgoing freeVars srcType ->
81+ Can.Outgoing freeVars _ srcType ->
8282 do vars <- traverse (\_ -> mkFlexVar) freeVars
8383 tipe <- Instantiate.fromSrcType (Map.map VarN vars) srcType
8484 let header = Map.singleton name (A.At zero tipe)