diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/library/lux/data/identity.lux | 38 |
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)) |