@@ -32,7 +32,7 @@ environment
32 -> Result.ResultErr Env.Environment
32 -> Result.ResultErr Env.Environment
33environment importDict interfaces (Module.Module name _ info) =
33environment importDict interfaces (Module.Module name _ info) =
35− (Module.Valid _ _ (defaults, imports) decls _) = -- TODO add foreign effects as patches?
35+ (Module.Valid _ _ (defaults, imports) decls effects) =
38 allImports =
38 allImports =
@@ -44,11 +44,14 @@ environment importDict interfaces (Module.Module name _ info) =
44 (typeAliasNodes, declPatches) =
44 (typeAliasNodes, declPatches) =
45 declarationsToPatches name decls
45 declarationsToPatches name decls
48+ effectsToPatches name effects
47 createEnv (moduleNamePairs, patchLists) =
50 createEnv (moduleNamePairs, patchLists) =
48 Env.fromPatches
51 Env.fromPatches
50 (Map.fromList (Maybe.catMaybes moduleNamePairs))
53 (Map.fromList (Maybe.catMaybes moduleNamePairs))
51− (concat (Env.builtinPatches : declPatches : patchLists))
54+ (concat (Env.builtinPatches : declPatches : effectPatches : patchLists))
53 (createEnv <$> importIngredients)
56 (createEnv <$> importIngredients)
54 `Result.andThen` addTypeAliases name typeAliasNodes
57 `Result.andThen` addTypeAliases name typeAliasNodes
@@ -307,10 +310,7 @@ addTypeAlias moduleName scc env =
307-- DECLARATIONS TO PATCHES
310-- DECLARATIONS TO PATCHES
310−declarationsToPatches
313+declarationsToPatches :: ModuleName.Canonical -> [D.Valid] -> ([Node], [Env.Patch])
311− :: ModuleName.Canonical
313− -> ([Node], [Env.Patch])
314declarationsToPatches moduleName decls =
314declarationsToPatches moduleName decls =
316 (maybeNodes, patchLists) =
316 (maybeNodes, patchLists) =
@@ -324,10 +324,7 @@ declarationsToPatches moduleName decls =
324-- _patterns are fully namespaced (Var.Module ...)
324-- _patterns are fully namespaced (Var.Module ...)
325-- _values that are defined as top-level declarations are (Var.TopLevel ...)
325-- _values that are defined as top-level declarations are (Var.TopLevel ...)
326-- all other _values are local (Var.Local)
326-- all other _values are local (Var.Local)
328− :: ModuleName.Canonical
327+declToPatches :: ModuleName.Canonical -> D.Valid -> (Maybe Node, [Env.Patch])
330− -> (Maybe Node, [Env.Patch])
331declToPatches moduleName (A.A (region,_) decl) =
328declToPatches moduleName (A.A (region,_) decl) =
333 topLevel mkPatch x =
330 topLevel mkPatch x =
@@ -370,6 +367,27 @@ declToPatches moduleName (A.A (region,_) decl) =
370+-- EFFECTS TO PATCHES
373+effectsToPatches :: ModuleName.Canonical -> Module.ValidEffects -> [Env.Patch]
374+effectsToPatches moduleName effects =
376+ Module.ValidNormal ->
379+ Module.ValidEffect maybeCmd maybeSub ->
380+ map (\name -> Env.Value name (Var.topLevel moduleName name)) $
382+ [ fmap (const "command") maybeCmd
383+ , fmap (const "subscription") maybeSub
386+ Module.ValidForeign ->
373-- RESTRICT VISIBLE API OF INTERFACES
391-- RESTRICT VISIBLE API OF INTERFACES