aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/control/function/mutual.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/control/function/mutual.lux')
-rw-r--r--stdlib/source/library/lux/control/function/mutual.lux104
1 files changed, 53 insertions, 51 deletions
diff --git a/stdlib/source/library/lux/control/function/mutual.lux b/stdlib/source/library/lux/control/function/mutual.lux
index dd647ce41..3d26dedd1 100644
--- a/stdlib/source/library/lux/control/function/mutual.lux
+++ b/stdlib/source/library/lux/control/function/mutual.lux
@@ -25,9 +25,10 @@
["." //])
(type: Mutual
- {#declaration Declaration
- #type Code
- #body Code})
+ (Record
+ {#declaration Declaration
+ #type Code
+ #body Code}))
(.def: mutual
(Parser [Declaration Code Code])
@@ -68,35 +69,36 @@
(macro.with_identifiers [g!context g!output]
(do {! meta.monad}
[here_name meta.current_module_name
- hidden_names (monad.map ! (//.constant (macro.identifier "mutual_function#"))
- functions)
- .let [definitions (list\map (..mutual_definition hidden_names g!context)
- (list.zipped/2 hidden_names
- functions))
- context_types (list\map (function (_ mutual)
- (` (-> (~ g!context) (~ (value@ #type mutual)))))
- functions)
- user_names (list\map (|>> (value@ [#declaration #declaration.name]) code.local_identifier)
- functions)]
- g!pop (local.push (list\map (function (_ [g!name mutual])
- [[here_name (value@ [#declaration #declaration.name] mutual)]
- (..macro g!context g!name)])
- (list.zipped/2 hidden_names
- functions)))]
+ hidden_names (monad.each ! (//.constant (macro.identifier "mutual_function#"))
+ functions)
+ .let [definitions (list\each (..mutual_definition hidden_names g!context)
+ (list.zipped/2 hidden_names
+ functions))
+ context_types (list\each (function (_ mutual)
+ (` (-> (~ g!context) (~ (value@ #type mutual)))))
+ functions)
+ user_names (list\each (|>> (value@ [#declaration #declaration.name]) code.local_identifier)
+ functions)]
+ g!pop (local.push (list\each (function (_ [g!name mutual])
+ [[here_name (value@ [#declaration #declaration.name] mutual)]
+ (..macro g!context g!name)])
+ (list.zipped/2 hidden_names
+ functions)))]
(in (list (` (.let [(~ g!context) (: (Rec (~ g!context)
[(~+ context_types)])
[(~+ definitions)])
[(~+ user_names)] (.let [[(~+ user_names)] (~ g!context)]
- [(~+ (list\map (function (_ g!name)
- (` ((~ g!name) (~ g!context))))
- user_names))])
+ [(~+ (list\each (function (_ g!name)
+ (` ((~ g!name) (~ g!context))))
+ user_names))])
(~ g!output) (~ body)]
(exec (~ g!pop)
(~ g!output))))))))))
(type: Definition
- {#export_policy Code
- #mutual Mutual})
+ (Record
+ {#export_policy Code
+ #mutual Mutual}))
(.def: definition
(Parser Definition)
@@ -119,37 +121,37 @@
(macro.with_identifiers [g!context g!output]
(do {! meta.monad}
[here_name meta.current_module_name
- hidden_names (monad.map ! (//.constant (macro.identifier "mutual_function#"))
- functions)
- .let [definitions (list\map (..mutual_definition hidden_names g!context)
- (list.zipped/2 hidden_names
- (list\map (value@ #mutual) functions)))
- context_types (list\map (function (_ mutual)
- (` (-> (~ g!context) (~ (value@ [#mutual #type] mutual)))))
- functions)
- user_names (list\map (|>> (value@ [#mutual #declaration #declaration.name]) code.local_identifier)
- functions)]
- g!pop (local.push (list\map (function (_ [g!name mutual])
- [[here_name (value@ [#mutual #declaration #declaration.name] mutual)]
- (..macro g!context g!name)])
- (list.zipped/2 hidden_names
- functions)))]
+ hidden_names (monad.each ! (//.constant (macro.identifier "mutual_function#"))
+ functions)
+ .let [definitions (list\each (..mutual_definition hidden_names g!context)
+ (list.zipped/2 hidden_names
+ (list\each (value@ #mutual) functions)))
+ context_types (list\each (function (_ mutual)
+ (` (-> (~ g!context) (~ (value@ [#mutual #type] mutual)))))
+ functions)
+ user_names (list\each (|>> (value@ [#mutual #declaration #declaration.name]) code.local_identifier)
+ functions)]
+ g!pop (local.push (list\each (function (_ [g!name mutual])
+ [[here_name (value@ [#mutual #declaration #declaration.name] mutual)]
+ (..macro g!context g!name)])
+ (list.zipped/2 hidden_names
+ functions)))]
(in (list& (` (.def: (~ g!context)
- [(~+ (list\map (value@ [#mutual #type]) functions))]
+ [(~+ (list\each (value@ [#mutual #type]) functions))]
(.let [(~ g!context) (: (Rec (~ g!context)
[(~+ context_types)])
[(~+ definitions)])
[(~+ user_names)] (~ g!context)]
- [(~+ (list\map (function (_ g!name)
- (` ((~ g!name) (~ g!context))))
- user_names))])))
+ [(~+ (list\each (function (_ g!name)
+ (` ((~ g!name) (~ g!context))))
+ user_names))])))
g!pop
- (list\map (function (_ mutual)
- (.let [g!name (|> mutual (value@ [#mutual #declaration #declaration.name]) code.local_identifier)]
- (` (.def:
- (~ (value@ #export_policy mutual))
- (~ g!name)
- (~ (value@ [#mutual #type] mutual))
- (.let [[(~+ user_names)] (~ g!context)]
- (~ g!name))))))
- functions)))))))
+ (list\each (function (_ mutual)
+ (.let [g!name (|> mutual (value@ [#mutual #declaration #declaration.name]) code.local_identifier)]
+ (` (.def:
+ (~ (value@ #export_policy mutual))
+ (~ g!name)
+ (~ (value@ [#mutual #type] mutual))
+ (.let [[(~+ user_names)] (~ g!context)]
+ (~ g!name))))))
+ functions)))))))