aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data
diff options
context:
space:
mode:
authorEduardo Julian2018-02-07 00:38:12 -0400
committerEduardo Julian2018-02-07 00:38:12 -0400
commitb68383450864306db8eeee4559d9bafe6dab5806 (patch)
treea8d195edf6a57cf7e3a2cf506fd09b074b967ef7 /stdlib/source/lux/data
parent844a44f87bd03fc9c65e18149c6dd2ccf8e9cb32 (diff)
- Small additions.
Diffstat (limited to 'stdlib/source/lux/data')
-rw-r--r--stdlib/source/lux/data/product.lux10
-rw-r--r--stdlib/source/lux/data/sum.lux24
2 files changed, 26 insertions, 8 deletions
diff --git a/stdlib/source/lux/data/product.lux b/stdlib/source/lux/data/product.lux
index 712e96437..09915b11e 100644
--- a/stdlib/source/lux/data/product.lux
+++ b/stdlib/source/lux/data/product.lux
@@ -1,4 +1,5 @@
-(.module: {#.doc "Functionality for working with tuples (particularly 2-tuples)."}
+(.module:
+ {#.doc "Functionality for working with tuples (particularly 2-tuples)."}
lux)
## [Functions]
@@ -36,3 +37,10 @@
(-> [a b] [c d])))
(function [[x y]]
[(f x) (g y)]))
+
+(def: #export (fork f g)
+ (All [a l r]
+ (-> (-> a l) (-> a r)
+ (-> a [l r])))
+ (function [x]
+ [(f x) (g x)]))
diff --git a/stdlib/source/lux/data/sum.lux b/stdlib/source/lux/data/sum.lux
index c2373c238..1a58127c1 100644
--- a/stdlib/source/lux/data/sum.lux
+++ b/stdlib/source/lux/data/sum.lux
@@ -1,7 +1,7 @@
-(.module: {#.doc "Functionality for working with variants (particularly 2-variants)."}
+(.module:
+ {#.doc "Functionality for working with variants (particularly 2-variants)."}
lux)
-## [Values]
(do-template [<name> <type> <index>]
[(def: #export (<name> value)
(All [a b] (-> <type> (| a b)))
@@ -10,13 +10,23 @@
[left a +0]
[right b +1])
-(def: #export (either f g)
- (All [a b c] (-> (-> a c) (-> b c)
- (-> (| a b) c)))
+(def: #export (either fl fr)
+ (All [a b c]
+ (-> (-> a c) (-> b c)
+ (-> (| a b) c)))
(function [input]
(case input
- (+0 l) (f l)
- (+1 r) (g r))))
+ (+0 l) (fl l)
+ (+1 r) (fr r))))
+
+(def: #export (each fl fr)
+ (All [l l' r r']
+ (-> (-> l l') (-> r r')
+ (-> (| l r) (| l' r'))))
+ (function [input]
+ (case input
+ (+0 l) (+0 (fl l))
+ (+1 r) (+1 (fr r)))))
(do-template [<name> <side> <tag>]
[(def: #export (<name> es)