glider88/php-trampoline

Trampoline realization for php

Maintainers

Package info

github.com/Glider88/php-trampoline

pkg:composer/glider88/php-trampoline

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-05-04 17:58 UTC

This package is auto-updated.

Last update: 2026-05-04 17:58:37 UTC


README

Stack save recursion with trampoline.

Installation:

composer require glider88/php-trampoline

Start:

bin/re  # first run
bin/up  # start app
bin/unit # run tests

Can do this:

/** @return Trampoline<int> */
function ackermann(int $n, int $m): Trampoline
{
    if ($n === 0) {
        return done($m + 1);
    }

    if ($m === 0) {
        return suspend(static fn() => ackermann($n - 1, 1));
    }

    return
        suspend(static fn() => ackermann($n, $m - 1))
            ->flatMap(
                static fn($res) => suspend(static fn() => ackermann($n - 1, $res))
            );
}

$this->assertEquals(7, run(ack(2, 2)));

more examples in test/TrampolineTest.php