diff options
author | Eduardo Julian | 2018-02-07 00:38:12 -0400 |
---|---|---|
committer | Eduardo Julian | 2018-02-07 00:38:12 -0400 |
commit | b68383450864306db8eeee4559d9bafe6dab5806 (patch) | |
tree | a8d195edf6a57cf7e3a2cf506fd09b074b967ef7 /stdlib/source/lux/data | |
parent | 844a44f87bd03fc9c65e18149c6dd2ccf8e9cb32 (diff) |
- Small additions.
Diffstat (limited to 'stdlib/source/lux/data')
-rw-r--r-- | stdlib/source/lux/data/product.lux | 10 | ||||
-rw-r--r-- | stdlib/source/lux/data/sum.lux | 24 |
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) |