diff options
Diffstat (limited to '')
-rw-r--r-- | source/lux/data/maybe.lux | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/source/lux/data/maybe.lux b/source/lux/data/maybe.lux index 396ec470a..a6019e256 100644 --- a/source/lux/data/maybe.lux +++ b/source/lux/data/maybe.lux @@ -7,12 +7,11 @@ ## You must not remove this notice, or any other, from this software. (;import lux - (.. list) - (lux (control (monoid #as m #refer #all) + (lux (meta macro) + (control (monoid #as m #refer #all) (functor #as F #refer #all) - (monad #as M #refer #all)) - (meta lux - syntax))) + (monad #as M #refer #all))) + (.. list)) ## [Types] ## (deftype (Maybe a) @@ -45,12 +44,16 @@ (#;Some xs) xs))) ## [Syntax] -(defsyntax #export (? maybe else) - (do Lux/Monad - [g!value (gensym "")] - (M;wrap (list (` (case (~ maybe) - (#;Some (~ g!value)) - (~ g!value) - - _ - (~ else))))))) +(defmacro #export (? tokens state) + (case tokens + (\ (list maybe else)) + (let [g!value (symbol$ ["" "_"])] + (#;Right state (list (` (case (~ maybe) + (#;Some (~ g!value)) + (~ g!value) + + _ + (~ else)))))) + + _ + (#;Left "Wrong syntax for ?"))) |