aboutsummaryrefslogtreecommitdiff
path: root/source/lux/data/id.lux
diff options
context:
space:
mode:
Diffstat (limited to 'source/lux/data/id.lux')
-rw-r--r--source/lux/data/id.lux12
1 files changed, 8 insertions, 4 deletions
diff --git a/source/lux/data/id.lux b/source/lux/data/id.lux
index 0e3bdbee6..3ad6b056b 100644
--- a/source/lux/data/id.lux
+++ b/source/lux/data/id.lux
@@ -8,7 +8,8 @@
(;import lux
(lux/control (functor #as F #refer #all)
- (monad #as M #refer #all)))
+ (monad #as M #refer #all)
+ (comonad #as CM #refer #all)))
## [Types]
(deftype #export (Id a)
@@ -23,6 +24,9 @@
(defstruct #export Id/Monad (Monad Id)
(def M;_functor Id/Functor)
(def (M;wrap a) (#Id a))
- (def (M;join mma)
- (let [(#Id ma) mma]
- ma)))
+ (def (M;join mma) (let [(#Id ma) mma] ma)))
+
+(defstruct #export Id/CoMonad (CoMonad Id)
+ (def CM;_functor Id/Functor)
+ (def (CM;unwrap wa) (let [(#Id a) wa] a))
+ (def (CM;split wa) (#Id wa)))