haskellcamargo/php-maybe-monad

PHP 实现的 Haskell 的 Maybe monad

v1.0 2015-06-23 16:25 UTC

This package is not auto-updated.

Last update: 2024-09-18 09:51:33 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

处理可能失败的计算。Haskell 的 Data.Maybe 模块的 PHP 版本,适用于 PHP > 5.4

安装

您可以通过 Composer 进行安装。

composer require haskellcamargo/php-maybe-monad

示例

use HaskellCamargo\Maybe;

Maybe\Maybe(@$_GET["username"])->bind(function($user)) {
  echo "Welcome, $user. You're logged in!";
});

$userAge = Maybe\Maybe(null)->fromMaybe(0); // => 0
$userAge = Maybe\Maybe(19)->fromMaybe(0); // => 19

文档

Maybe 类型封装了一个可选值。类型为 Maybe a 的值要么包含类型为 a 的值(表示为 Just a),要么为空(表示为 Nothing)。使用 Maybe 是处理错误或异常情况的好方法,而无需求助于像 Exception 这样的极端措施。Maybe 类型也是一个 monad。它是一种简单的错误 monad,其中所有错误都由 Nothing 表示。可以使用 Either 类型构建更丰富的错误 monad。

bind :: (Maybe a, callable) -> Maybe b

等同于 Haskell 的 >>= 操作符。其第一个参数是一个 monadic 类型的值,第二个参数是一个将第一个参数的底层类型映射到另一个 monadic 类型的函数,其结果是那个其他 monadic 类型。

$age = Maybe\Maybe(null)->bind(function($x) {
  return 10;
}); // => Nothing

$age = Maybe\Maybe(10)
->bind(function($x) {
  return $x + 10; // => Just(20);
})
->bind(function($x) {
  return $x + 20; // => Just(40);
})->fromJust(); // => 40

fromJust :: Maybe a -> a

Just 中提取元素并返回一个错误,如果其参数是 Nothing

Maybe\Maybe("Foo")->fromJust(); // => "Foo"
Maybe\Maybe(null)->fromJust(); // => Exception: Cannot cal fromJust() on Nothing

fromMaybe :: (Maybe a, a) -> a

接受一个 Maybe 值和一个默认值。如果 MaybeNothing,则返回默认值;否则,返回 Maybe 中包含的值。

Maybe\Maybe(10)->fromMaybe(5); // => 10
Maybe\Maybe(null)->fromMaybe(5); // => 5

isJust :: Maybe a -> boolean

如果其参数是 Just _ 的形式,则返回 true。

Maybe\Maybe(10)->isJust(); // => true
Maybe\Maybe(null)->isJust(); // => false

isNothing :: Maybe a -> boolean

如果其参数是 Nothing 的形式,则返回 true。

Maybe\Maybe(10)->isNothing(); // => false
Maybe\Maybe(null)->isNothing(); // => true

maybe :: (Maybe a, b, callable) -> b

接受一个默认值、一个函数和当然,一个 Maybe 值。如果 Maybe 值是 Nothing,则函数返回默认值。否则,将函数应用于 Just 内部的值并返回结果。

$just = Maybe\Maybe(10);
$nothing = Maybe\Maybe(null);

$just->maybe(40, function($num) {
        return $num + 15;
}); // => 25

$nothing->maybe(40, function($num) {
  return $num + 15;
}); // => 40

toList :: Maybe a -> array

如果给定 Nothing,则返回一个空列表;如果没有给定 Nothing,则返回一个单元素列表。

Maybe\Maybe(10)->toList(); // => [10]
Maybe\Maybe(null)->toList(); // => []

由 Marcelo Camargo 和 Reinaldo Rauch 用 ❤️ 制作

许可证

MIT