@@ -8,8 +8,6 @@ module Canonicalize.Effects
9import qualified Data.Foldable as F
9import qualified Data.Foldable as F
10import qualified Data.Map as Map
10import qualified Data.Map as Map
11−import qualified Data.Set as Set
12−import Data.Text (Text)
14import qualified AST.Canonical as Can
12import qualified AST.Canonical as Can
15import qualified AST.Valid as Valid
13import qualified AST.Valid as Valid
@@ -86,7 +84,7 @@ canonicalizePort env (Valid.Port (A.At region portName) tipe) =
86 Result.throw (Error.PortPayloadInvalid region portName badType err)
84 Result.throw (Error.PortPayloadInvalid region portName badType err)
88 Right () ->
86 Right () ->
89− Result.ok (portName, Can.Outgoing freeVars ctipe)
87+ Result.ok (portName, Can.Outgoing freeVars outgoingType ctipe)
91 Can.TLambda (Can.TLambda incomingType (Can.TVar msg1)) (Can.TType home name [Can.TVar msg2])
89 Can.TLambda (Can.TLambda incomingType (Can.TVar msg1)) (Can.TType home name [Can.TVar msg2])
92 | home == ModuleName.sub && name == "Sub" && msg1 == msg2 ->
90 | home == ModuleName.sub && name == "Sub" && msg1 == msg2 ->
@@ -95,7 +93,7 @@ canonicalizePort env (Valid.Port (A.At region portName) tipe) =
95 Result.throw (Error.PortPayloadInvalid region portName badType err)
93 Result.throw (Error.PortPayloadInvalid region portName badType err)
97 Right () ->
95 Right () ->
98− Result.ok (portName, Can.Incoming freeVars ctipe)
96+ Result.ok (portName, Can.Incoming freeVars incomingType ctipe)
101 Result.throw (Error.PortTypeInvalid region portName ctipe)
99 Result.throw (Error.PortTypeInvalid region portName ctipe)
@@ -141,8 +139,9 @@ checkPayload tipe =
141 Can.TType home name args ->
139 Can.TType home name args ->
142 case args of
140 case args of
144− | isPrim home name -> Right ()
145 | isJson home name -> Right ()
142 | isJson home name -> Right ()
143+ | isString home name -> Right ()
144+ | isIntFloatBool home name -> Right ()
148 | isList home name -> checkPayload arg
147 | isList home name -> checkPayload arg
@@ -178,31 +177,43 @@ checkPayload tipe =
178 F.traverse_ checkPayload fields
177 F.traverse_ checkPayload fields
181−isPrim :: ModuleName.Canonical -> N.Name -> Bool
180+isIntFloatBool :: ModuleName.Canonical -> N.Name -> Bool
182−isPrim home name =
181+isIntFloatBool home name =
183− home == ModuleName.basics && Set.member name primitives
182+ home == ModuleName.basics
184+ (name == N.int || name == N.float || name == N.bool)
186−primitives :: Set.Set Text
187+isString :: ModuleName.Canonical -> N.Name -> Bool
187−primitives =
188+isString home name =
188− Set.fromList [ N.int, N.float, N.string, N.bool ]
189+ home == ModuleName.string
191isJson :: ModuleName.Canonical -> N.Name -> Bool
194isJson :: ModuleName.Canonical -> N.Name -> Bool
192isJson home name =
195isJson home name =
193− home == ModuleName.jsonEncode && name == N.value
196+ home == ModuleName.jsonEncode
196isList :: ModuleName.Canonical -> N.Name -> Bool
201isList :: ModuleName.Canonical -> N.Name -> Bool
197isList home name =
202isList home name =
198− home == ModuleName.list && name == N.list
203+ home == ModuleName.list
201isMaybe :: ModuleName.Canonical -> N.Name -> Bool
208isMaybe :: ModuleName.Canonical -> N.Name -> Bool
202isMaybe home name =
209isMaybe home name =
203− home == ModuleName.maybe && name == N.maybe
210+ home == ModuleName.maybe
206isArray :: ModuleName.Canonical -> N.Name -> Bool
215isArray :: ModuleName.Canonical -> N.Name -> Bool
207isArray home name =
216isArray home name =
208− home == ModuleName.array && name == N.array
217+ home == ModuleName.array