diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/library/lux.lux | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/stdlib/source/library/lux.lux b/stdlib/source/library/lux.lux index d10f8d2f5..0872e57c1 100644 --- a/stdlib/source/library/lux.lux +++ b/stdlib/source/library/lux.lux @@ -4868,15 +4868,34 @@ (in_meta (list pick)) (target_pick target options' default))))) +(def: (pairs' tokens) + (-> (List Code) (Maybe (List [Code Code]))) + (if (|> tokens + list\size + (n/% 2) + ("lux i64 =" 0)) + (#Some (pairs tokens)) + #None)) + (macro: .public (for tokens) (do meta_monad [target ..target] (case tokens - (^ (list [_ (#Record options)])) - (target_pick target options #None) + (^ (list [_ (#Tuple options)])) + (case (pairs' options) + (#Some options) + (target_pick target options #None) + + #None + (failure (..wrong_syntax_error (name_of ..for)))) - (^ (list [_ (#Record options)] default)) - (target_pick target options (#Some default)) + (^ (list [_ (#Tuple options)] default)) + (case (pairs' options) + (#Some options) + (target_pick target options (#Some default)) + + #None + (failure (..wrong_syntax_error (name_of ..for)))) _ (failure (..wrong_syntax_error (name_of ..for)))))) |