diff options
Diffstat (limited to 'stdlib/source/library/lux/abstract/monad/indexed.lux')
-rw-r--r-- | stdlib/source/library/lux/abstract/monad/indexed.lux | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/stdlib/source/library/lux/abstract/monad/indexed.lux b/stdlib/source/library/lux/abstract/monad/indexed.lux index 212b190f4..f1d774637 100644 --- a/stdlib/source/library/lux/abstract/monad/indexed.lux +++ b/stdlib/source/library/lux/abstract/monad/indexed.lux @@ -8,7 +8,7 @@ [collection ["[0]" list (.open: "[1]#[0]" functor mix)]]] ["[0]" macro (.only) - [syntax (.only syntax:)] + [syntax (.only syntax)] ["[0]" code]]]] ["[0]" //]) @@ -61,33 +61,34 @@ (at <>.monad each (|>> [{.#None}]) <code>.any))) -(syntax: .public (do [[?name monad] ..named_monad - context (<code>.tuple (<>.some context)) - expression <code>.any]) - (macro.with_symbols [g!_ g!then] - (let [body (list#mix (function (_ context next) - (case context - {#Macro macro parameter} - (` ((~ (code.symbol macro)) - (~ parameter) - (~ next))) - - {#Binding [binding value]} - (` ((~ g!then) - (.function ((~ g!_) (~ binding)) - (~ next)) - (~ value))))) - expression - (list.reversed context))] - (in (list (case ?name - {.#Some name} - (let [name (code.local name)] - (` (let [(~ name) (~ monad) - [..in (~' in) - ..then (~ g!then)] (~ name)] - (~ body)))) +(def: .public do + (syntax (_ [[?name monad] ..named_monad + context (<code>.tuple (<>.some context)) + expression <code>.any]) + (macro.with_symbols [g!_ g!then] + (let [body (list#mix (function (_ context next) + (case context + {#Macro macro parameter} + (` ((~ (code.symbol macro)) + (~ parameter) + (~ next))) + + {#Binding [binding value]} + (` ((~ g!then) + (.function ((~ g!_) (~ binding)) + (~ next)) + (~ value))))) + expression + (list.reversed context))] + (in (list (case ?name + {.#Some name} + (let [name (code.local name)] + (` (let [(~ name) (~ monad) + [..in (~' in) + ..then (~ g!then)] (~ name)] + (~ body)))) - {.#None} - (` (let [[..in (~' in) - ..then (~ g!then)] (~ monad)] - (~ body))))))))) + {.#None} + (` (let [[..in (~' in) + ..then (~ g!then)] (~ monad)] + (~ body)))))))))) |