aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/data/identity.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/library/lux/data/identity.lux38
1 files changed, 38 insertions, 0 deletions
diff --git a/stdlib/source/library/lux/data/identity.lux b/stdlib/source/library/lux/data/identity.lux
new file mode 100644
index 000000000..c0a39ab5e
--- /dev/null
+++ b/stdlib/source/library/lux/data/identity.lux
@@ -0,0 +1,38 @@
+(.module:
+ [library
+ [lux #*
+ [abstract
+ [functor (#+ Functor)]
+ [apply (#+ Apply)]
+ [monad (#+ Monad)]
+ [comonad (#+ CoMonad)]]
+ [control
+ ["." function]]]])
+
+(type: #export (Identity a)
+ a)
+
+(implementation: #export functor
+ (Functor Identity)
+
+ (def: map function.identity))
+
+(implementation: #export apply
+ (Apply Identity)
+
+ (def: &functor ..functor)
+ (def: (apply ff fa) (ff fa)))
+
+(implementation: #export monad
+ (Monad Identity)
+
+ (def: &functor ..functor)
+ (def: wrap function.identity)
+ (def: join function.identity))
+
+(implementation: #export comonad
+ (CoMonad Identity)
+
+ (def: &functor ..functor)
+ (def: unwrap function.identity)
+ (def: split function.identity))