mckayb / phantasy-recursion-schemes
Common recursion schemes implemented in PHP
v1.0.0
2019-02-24 21:29 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^7.5
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-10-25 09:56:34 UTC
README
Common recursion schemes implemented in PHP.
Getting Started
Installation
composer require mckayb/phantasy-recursion-schemes
Usage
// This comes from https://github.com/mckayb/phantasy-types use function Phantasy\Types\sum; use function Phantasy\Recursion\cata; $LL = sum('LinkedList', [ 'Cons' => ['head', 'tail'], 'Nil' => [] ]); $LL->map = function (callable $f) { return $this->cata([ 'Cons' => function ($head, $tail) use ($f) { return $this->Cons($head, $f($tail)); }, 'Nil' => function () { return $this->Nil(); } ]); }; $LL->isNil = function () { return $this->cata([ 'Cons' => function ($head, $tail) { return false; }, 'Nil' => function () { return true; } ]); }; $alg = function ($x) { return $x->isNil() ? 0 : $x->head + $x->tail; }; $a = $LL->Cons(3, $LL->Cons(2, $LL->Cons(1, $LL->Nil()))); echo cata($alg, $a); // 6
For more information, read the docs!
What's Included
- Catamorphisms, Anamorphisms, Hylomorphisms
Contributing
Find a bug? Want to make any additions? Just create an issue or open up a pull request.
Want more?
For other helpers not included in this repo, check out