42linoge/functionalphp

PHP的函数式编程工具

dev-master 2016-05-18 23:35 UTC

This package is not auto-updated.

Last update: 2024-09-24 21:31:07 UTC


README

从函数式世界(tm)到PHP的小型库移植工具。这是一项持续的工作,我在学习FP的同时进行,还涉及到范畴论。

我已经编写了一些测试。所有函数都是柯里化的。

编写柯里化函数

use CLinoge\Functional\F;

function myFunction(... $args) {
    $myFunction = F::curry(function($arg1, $arg2) {
        // Operate on $arg1 and $arg2
        return $result;
    });

    return call_user_func_array($myFunction, $args);
}

单子,函子

提供了对IO、Maybe和Left/Right的基本支持。它们的实现基于《Mostly Adequate Guide》和RamdaJS中暴露的思想。

函数占位符

对于n元柯里化函数f,以下成立

use CLinoge\Functional\Placeholder;

f(a1, a2, ..., a(N - 1), aN) == f(a1, new Placeholder, ..., new Placeholder, aN)(a2)(a(N-1));

AutoCurry对象

实验性功能,您可以测试它

use CLinoge\Functional\CurryTransform;

$constructor = CurryTransform::take(SomeClass::class);
$object = $constructor(a1, a2, ..., aN);
$object->someMethod($a1)($a2) == $object->someMethod($a1, $a2);

贡献

添加文档,提高性能,编写测试:-)。我每天都在改进它,还没有达到稳定阶段^^。