diff options
author | Eduardo Julian | 2020-05-09 02:12:56 -0400 |
---|---|---|
committer | Eduardo Julian | 2020-05-09 02:12:56 -0400 |
commit | 8d9fd8b34f8716be7fa1059eb9761330d9667753 (patch) | |
tree | aacc3fef52551c6b02f66435dedd5a0e5bfc18bc /stdlib/source/lux/abstract | |
parent | 3e524725cfb47cb56466a08ac290ed5a389748be (diff) |
Including runtime machinery in the cache.
Diffstat (limited to 'stdlib/source/lux/abstract')
-rw-r--r-- | stdlib/source/lux/abstract/functor.lux | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/stdlib/source/lux/abstract/functor.lux b/stdlib/source/lux/abstract/functor.lux index a259673d4..a9fc6796c 100644 --- a/stdlib/source/lux/abstract/functor.lux +++ b/stdlib/source/lux/abstract/functor.lux @@ -9,11 +9,29 @@ (type: #export (Fix f) (f (Fix f))) +(type: #export (Or f g) + (All [a] (| (f a) (g a)))) + +(def: #export (sum (^open "f@.") (^open "g@.")) + (All [F G] (-> (Functor F) (Functor G) (Functor (..Or F G)))) + (structure + (def: (map f fa|ga) + (case fa|ga + (#.Left fa) + (#.Left (f@map f fa)) + + (#.Right ga) + (#.Right (g@map f ga)))))) + (type: #export (And f g) (All [a] (& (f a) (g a)))) -(type: #export (Or f g) - (All [a] (| (f a) (g a)))) +(def: #export (product (^open "f@.") (^open "g@.")) + (All [F G] (-> (Functor F) (Functor G) (Functor (..And F G)))) + (structure + (def: (map f [fa ga]) + [(f@map f fa) + (g@map f ga)]))) (type: #export (Then f g) (All [a] (f (g a)))) |