aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux.lux')
-rw-r--r--stdlib/source/library/lux.lux15
1 files changed, 12 insertions, 3 deletions
diff --git a/stdlib/source/library/lux.lux b/stdlib/source/library/lux.lux
index cdcb304a0..1c550ec22 100644
--- a/stdlib/source/library/lux.lux
+++ b/stdlib/source/library/lux.lux
@@ -4264,11 +4264,20 @@
_
(failure (..wrong_syntax_error (symbol ..refer)))))
+(macro: .public (with tokens)
+ (case (..parsed (..andP ..anyP ..anyP)
+ tokens)
+ {.#Some [implementation expression]}
+ (meta#in (list (` (..let [(..open (~ (text$ (alias_stand_in 0)))) (~ implementation)]
+ (~ expression)))))
+
+ {.#None}
+ (failure (..wrong_syntax_error (symbol ..with)))))
+
(macro: .public (at tokens)
(case tokens
- (pattern (list struct [_ {#Symbol member}]))
- (meta#in (list (` (..let [(..open (~ (text$ (alias_stand_in 0)))) (~ struct)]
- (~ (symbol$ member))))))
+ (pattern (list implementation [_ {#Symbol member}]))
+ (meta#in (list (` (..with (~ implementation) (~ (symbol$ member))))))
(pattern (partial_list struct member args))
(meta#in (list (` ((..at (~ struct) (~ member)) (~+ args)))))