library for monad pattern in PHP.
this library implements below type (class)
- Identity
- Maybe
- Either
- ListLike(List)
you can install from packagist.org.
composer require yshnb/php-monadic:dev-master
Identity is a monad type, which simply wrap any value.
<?php
use Monadic\Type\Identity;
$foo = 1;
$identity = Identity::unit($foo)->bind(function($val) {
return Identity::unit($val * 2);
});
echo $identity->get(); // 2
<?php
use Monadic\Type\Maybe;
$foo = 1;
$maybe = Maybe::unit($foo)->bind(function($val) {
return Maybe::unit($val + 1);
});
echo $maybe->get(); // 2
$maybe = $maybe->bind(function($val) {
return Maybe::unit();
});
echo $maybe->get(); // null
<?php
use Monadic\Type\Either\Right;
use Monadic\Type\Either\Left;
$foo = 1;
$either = Right::unit($foo)->bind(function($val) {
return Left::unit($val + 1);
})->left(function($val) {
return Right::unit($val + 1);
})->left(function($val) {
// not executed
return Right::unit($val + 1);
});
echo $either->get(); // 3
ListLike represents list type (class). Because list is a reserved word in PHP, this type is called ListLike.
<?php
use Monadic\Type\ListLike;
$listLike = ListLike::unit(1,2,3);
$listLike = $listLike->bind(function($val) {
return ListLike::unit($val * 2);
});
echo $listLike[0]; // 3
echo $listLike[1]; // 4
echo $listLike[2]; // 6