From 116e3cab66eb8d9d09aca20310a01f544848b7fa Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Tue, 22 Nov 2022 18:36:58 +0100 Subject: add =>* --- mew.scm | 8 +++++++- mew.svnwiki | 4 ++++ tests/test.mew | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/mew.scm b/mew.scm index 97ff476..bc03f6d 100644 --- a/mew.scm +++ b/mew.scm @@ -26,7 +26,7 @@ -> fun-> fun->> set-> =? <>? ~? - => and=> set=> + => =>* and=> set=> generic-make-accumulator) @@ -850,6 +850,12 @@ (define => act) + (define-syntax =>* + (syntax-rules () + ((_ expr . fs) + (receive args expr + (apply (per . fs) args))))) + (define-syntax set=> (syntax-rules () ((_ location . fs) diff --git a/mew.svnwiki b/mew.svnwiki index 7fd2d57..09c6d86 100644 --- a/mew.svnwiki +++ b/mew.svnwiki @@ -211,6 +211,10 @@ Reverse function compose all {{}}, then apply to {{}}. Alias for {{act}}. +(=>*
...) + +Like {{=>}}, but {{}} may return multiple values. + (set=> ...) Shortcut for {{(set (=> ...))}}. diff --git a/tests/test.mew b/tests/test.mew index 9220312..904059d 100644 --- a/tests/test.mew +++ b/tests/test.mew @@ -478,6 +478,11 @@ (test 43 (=> '(6 7) (op apply * _) inc)) (test 42 (=> 42))) +(test-group "=>*" + (test 42 (=>* (values 6 7) * dec inc)) + (test '(6 7) (receive (=>* (values 6 7)))) + (test '(7 6) (receive (=>* (values 6 7) (proj 1 0))))) + (test-group "set=>" (test 42 (seq (def x 40) -- cgit 1.4.1