@@ -38,14 +38,17 @@ module' (Module.Module name path info) =
38 (Module.Source tag settings docs exports imports decls) =
38 (Module.Source tag settings docs exports imports decls) =
41+ do validDecls <- declarations decls
41− do validEffects <- validateModuleDecl tag settings
42+ validEffects <- validateEffects tag settings validDecls
42− validDecls <- declarations decls
44 return $ Module.Module name path $
44 return $ Module.Module name path $
45 Module.Valid docs exports (addDefaults pkgName imports) validDecls validEffects
45 Module.Valid docs exports (addDefaults pkgName imports) validDecls validEffects
48−-- determine if default imports should be added, only elm-lang/core is exempt
48+
49addDefaults
52addDefaults
50 :: Package.Name
53 :: Package.Name
51 -> [Module.UserImport]
54 -> [Module.UserImport]
@@ -59,11 +62,16 @@ addDefaults pkgName imports =
59 Imports.defaults
62 Imports.defaults
63 :: Module.SourceTag
70 :: Module.SourceTag
64 -> Module.SourceSettings
71 -> Module.SourceSettings
65 -> Result.Result wrn Error.Error Fx.Effects
73 -> Result.Result wrn Error.Error Fx.Effects
66−validateModuleDecl tag settings@(A.A _ pairs) =
74+validateEffects tag settings@(A.A _ pairs) decls =
67 case tag of
75 case tag of
68 Module.Normal ->
76 Module.Normal ->
69 do noSettings Error.SettingsOnNormalModule settings
77 do noSettings Error.SettingsOnNormalModule settings
@@ -82,8 +90,8 @@ validateModuleDecl tag settings@(A.A _ pairs) =
82 foldr collectSettings Map.empty pairs
90 foldr collectSettings Map.empty pairs
84 do managerType <- toManagerType tagRegion settingsDict
92 do managerType <- toManagerType tagRegion settingsDict
85− return $ Fx.Effect $
93+ (r0, r1, r2) <- getManagerRegions tagRegion Nothing Nothing Nothing decls
86− Fx.Info tagRegion (error "TODO") (error "TODO") (error "TODO") managerType
94+ return (Fx.Effect (Fx.Info tagRegion r0 r1 r2 managerType))
@@ -155,6 +163,60 @@ extractOne name settingsDict =
175+ -> Result.Result w Error.Error (R.Region, R.Region, R.Region)
176+getManagerRegions tagRegion r0 r1 r2 decls =
180+ <$> requireRegion tagRegion "init" r0
181+ <*> requireRegion tagRegion "onEffects" r1
182+ <*> requireRegion tagRegion "onSelfMsg" r2
185+ case getDefInfo decl of
186+ Just ("init", region) ->
187+ getManagerRegions tagRegion (Just region) r1 r2 rest
189+ Just ("onEffects", region) ->
190+ getManagerRegions tagRegion r0 (Just region) r2 rest
192+ Just ("onSelfMsg", region) ->
193+ getManagerRegions tagRegion r0 r1 (Just region) rest
196+ getManagerRegions tagRegion r0 r1 r2 rest
199+getDefInfo :: D.Valid -> Maybe (String, R.Region)
202+ A.A region (D.Def (Valid.Definition (A.A _ (Pattern.Var name)) _ _)) ->
203+ Just (name, fst region)
209+requireRegion :: R.Region -> String -> Maybe R.Region -> Result.Result w Error.Error R.Region
210+requireRegion tagRegion name maybeRegion =
216+ Result.throw tagRegion (error $ "TODO - " ++ name)
158-- COLLAPSE COMMENTS
220-- COLLAPSE COMMENTS