@@ -8,8 +8,6 @@ module Canonicalize.Effects
88
99import qualified Data.Foldable as F
1010import qualified Data.Map as Map
11−import qualified Data.Set as Set
12−import Data.Text (Text)
1311
1412import qualified AST.Canonical as Can
1513import qualified AST.Valid as Valid
@@ -86,7 +84,7 @@ canonicalizePort env (Valid.Port (A.At region portName) tipe) =
8684 Result.throw (Error.PortPayloadInvalid region portName badType err)
8785
8886 Right () ->
89− Result.ok (portName, Can.Outgoing freeVars ctipe)
87+ Result.ok (portName, Can.Outgoing freeVars outgoingType ctipe)
9088
9189 Can.TLambda (Can.TLambda incomingType (Can.TVar msg1)) (Can.TType home name [Can.TVar msg2])
9290 | home == ModuleName.sub && name == "Sub" && msg1 == msg2 ->
@@ -95,7 +93,7 @@ canonicalizePort env (Valid.Port (A.At region portName) tipe) =
9593 Result.throw (Error.PortPayloadInvalid region portName badType err)
9694
9795 Right () ->
98− Result.ok (portName, Can.Incoming freeVars ctipe)
96+ Result.ok (portName, Can.Incoming freeVars incomingType ctipe)
9997
10098 _ ->
10199 Result.throw (Error.PortTypeInvalid region portName ctipe)
@@ -141,8 +139,9 @@ checkPayload tipe =
141139 Can.TType home name args ->
142140 case args of
143141 []
144− | isPrim home name -> Right ()
145142 | isJson home name -> Right ()
143+ | isString home name -> Right ()
144+ | isIntFloatBool home name -> Right ()
146145
147146 [arg]
148147 | isList home name -> checkPayload arg
@@ -178,31 +177,43 @@ checkPayload tipe =
178177 F.traverse_ checkPayload fields
179178
180179
181−isPrim :: ModuleName.Canonical -> N.Name -> Bool
182−isPrim home name =
183− home == ModuleName.basics && Set.member name primitives
180+isIntFloatBool :: ModuleName.Canonical -> N.Name -> Bool
181+isIntFloatBool home name =
182+ home == ModuleName.basics
183+ &&
184+ (name == N.int || name == N.float || name == N.bool)
184185
185186
186−primitives :: Set.Set Text
187−primitives =
188− Set.fromList [ N.int, N.float, N.string, N.bool ]
187+isString :: ModuleName.Canonical -> N.Name -> Bool
188+isString home name =
189+ home == ModuleName.string
190+ &&
191+ name == N.string
189192
190193
191194isJson :: ModuleName.Canonical -> N.Name -> Bool
192195isJson home name =
193− home == ModuleName.jsonEncode && name == N.value
196+ home == ModuleName.jsonEncode
197+ &&
198+ name == N.value
194199
195200
196201isList :: ModuleName.Canonical -> N.Name -> Bool
197202isList home name =
198− home == ModuleName.list && name == N.list
203+ home == ModuleName.list
204+ &&
205+ name == N.list
199206
200207
201208isMaybe :: ModuleName.Canonical -> N.Name -> Bool
202209isMaybe home name =
203− home == ModuleName.maybe && name == N.maybe
210+ home == ModuleName.maybe
211+ &&
212+ name == N.maybe
204213
205214
206215isArray :: ModuleName.Canonical -> N.Name -> Bool
207216isArray home name =
208− home == ModuleName.array && name == N.array
217+ home == ModuleName.array
218+ &&
219+ name == N.array