NAME
Data::Monad::Base::Monad - The base class of any monads.
SYNOPSIS
package YourMonadClass;
use base qw/Data::Monad::Base::Monad/;
sub unit {
my ($class, @v) = @_;
...
}
sub flat_map {
my ($self, $f) = @_;
...
}
DESCRIPTION
Data::Monad::Base::Monad provides some useful functions for any monads.
You must implement unit() and flat_map() according to monad laws. Or you may implement flatten() and map() instead of flat_map().
This module is marked EXPERIMENTAL. API could be changed without any notice. I'll drop many useless stuffs in the future.
METHODS
- $m = SomeMonad->unit(@vs);
-
A natural transformation, which is known as "return" in Haskell.
You must implement this method in sub classes.
- $f = SomeMonad->flat_map_multi(sub { ... }, $m1, $m2, ...);
-
Changes the type of function from (v1, v2, ...) -> m(v0) to (m(v1), m(v2), ...) -> m(v0), and apply it to $m1, $m2, ...
- $f = SomeMonad->map_multi(sub { ... }, $m1, $m2, ...);
-
Changes the type of function from (v1, v2, ...) -> v0 to (m(v1), m(v2), ...) -> m(v0), and apply it to $m1, $m2, ...
- $m = SomeMonad->sequence($m1, $m2, $m3, ...);
-
Packs monads into the new monad.
- $m2 = $m1->flat_map(sub { ... });
-
The composition of Kleisli category, which known as ">>=" in Haskell.
You must implement this method in sub classes.
- $m2 = $m1->map(sub { ... });
-
The morphism map of the monad, which is known as "fmap" in Haskell.
- $m = $mm->flatten;
-
A natural transformation, which is known as "join" in Haskell.
- $m = $mf->ap($m1, $m2,...);
-
Executes the function which wrapped by the monad.
- $m = $m->while(\&predicate, \&f);
-
flat_map(\&f)
while\&predicate
is true.
AUTHOR
hiratara <hiratara {at} cpan.org>
SEE ALSO
Data::Monad::Base::MonadZero, Data::Monad::Base::Sugar
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.