@@ -90,7 +90,7 @@ validateEffects tag settings@(A.A _ pairs) decls =
90 foldr collectSettings Map.empty pairs
90 foldr collectSettings Map.empty pairs
92 do managerType <- toManagerType tagRegion settingsDict
92 do managerType <- toManagerType tagRegion settingsDict
93− (r0, r1, r2) <- getManagerRegions tagRegion Nothing Nothing Nothing decls
93+ (r0, r1, r2) <- checkManagerImpl tagRegion managerType noInfo decls
94 return (Fx.Effect (Fx.Info tagRegion r0 r1 r2 managerType))
94 return (Fx.Effect (Fx.Info tagRegion r0 r1 r2 managerType))
@@ -166,34 +166,58 @@ extractOne name settingsDict =
166-- EFFECT REGIONS
166-- EFFECT REGIONS
169−getManagerRegions
169+data ManagerInfo =
173+ , _init :: Maybe R.Region
174+ , _onEffects :: Maybe R.Region
175+ , _onSelfMsg :: Maybe R.Region
179+noInfo :: ManagerInfo
181+ ManagerInfo False False Nothing Nothing Nothing
170 :: R.Region
185 :: R.Region
171− -> Maybe R.Region
186+ -> Fx.ManagerType
172− -> Maybe R.Region
187+ -> ManagerInfo
174 -> [D.Valid]
188 -> [D.Valid]
175 -> Result.Result w Error.Error (R.Region, R.Region, R.Region)
189 -> Result.Result w Error.Error (R.Region, R.Region, R.Region)
176−getManagerRegions tagRegion r0 r1 r2 decls =
190+checkManagerImpl tagRegion managerType info decls =
177 case decls of
191 case decls of
194+ (ManagerInfo cmdMap subMap init onEffects onSelfMsg) = info
197+ <$> requireMaps tagRegion managerType cmdMap subMap
180− <$> requireRegion tagRegion "init" r0
198+ <*> requireRegion tagRegion "init" init
181− <*> requireRegion tagRegion "onEffects" r1
199+ <*> requireRegion tagRegion "onEffects" onEffects
182− <*> requireRegion tagRegion "onSelfMsg" r2
200+ <*> requireRegion tagRegion "onSelfMsg" onSelfMsg
184 decl : rest ->
202 decl : rest ->
185 case getDefInfo decl of
203 case getDefInfo decl of
186 Just ("init", region) ->
204 Just ("init", region) ->
187− getManagerRegions tagRegion (Just region) r1 r2 rest
205+ checkManagerImpl tagRegion managerType (info { _init = Just region }) rest
189 Just ("onEffects", region) ->
207 Just ("onEffects", region) ->
190− getManagerRegions tagRegion r0 (Just region) r2 rest
208+ checkManagerImpl tagRegion managerType (info { _onEffects = Just region }) rest
192 Just ("onSelfMsg", region) ->
210 Just ("onSelfMsg", region) ->
193− getManagerRegions tagRegion r0 r1 (Just region) rest
211+ checkManagerImpl tagRegion managerType (info { _onSelfMsg = Just region }) rest
213+ Just ("cmdMap", _) ->
214+ checkManagerImpl tagRegion managerType (info { _cmdMap = True }) rest
216+ Just ("subMap", _) ->
217+ checkManagerImpl tagRegion managerType (info { _subMap = True }) rest
196− getManagerRegions tagRegion r0 r1 r2 rest
220+ checkManagerImpl tagRegion managerType info rest
199getDefInfo :: D.Valid -> Maybe (String, R.Region)
223getDefInfo :: D.Valid -> Maybe (String, R.Region)
@@ -206,6 +230,25 @@ getDefInfo decl =
233+requireMaps :: R.Region -> Fx.ManagerType -> Bool -> Bool -> Result.Result w Error.Error ()
234+requireMaps tagRegion managerType hasCmdMap hasSubMap =
237+ when (not hasIt) (Result.throw tagRegion (Error.MissingManagerOnEffectModule name))
241+ check hasCmdMap "cmdMap"
244+ check hasSubMap "subMap"
248+ <$> check hasCmdMap "cmdMap"
249+ <*> check hasSubMap "subMap"
209requireRegion :: R.Region -> String -> Maybe R.Region -> Result.Result w Error.Error R.Region
252requireRegion :: R.Region -> String -> Maybe R.Region -> Result.Result w Error.Error R.Region
210requireRegion tagRegion name maybeRegion =
253requireRegion tagRegion name maybeRegion =
211 case maybeRegion of
254 case maybeRegion of