public function test_curry() { $actual = Functools::curry(function ($a, $b, $c) { return $a . $b . $c; }); $this->assertInstanceOf('Teto\\Functools\\CurriedCallable', $actual); $this->assertEquals(1, Functools::arity($actual)); $actual_a = $actual("A"); $this->assertInstanceOf('Teto\\Functools\\CurriedCallable', $actual_a); $this->assertEquals(1, Functools::arity($actual_a)); $actual_ab = $actual_a("b"); $this->assertInstanceOf('Teto\\Functools\\CurriedCallable', $actual_ab); $this->assertEquals(1, Functools::arity($actual_ab)); $actual_abc = $actual_ab("C"); $this->assertSame("AbC", $actual_abc); $this->assertNotInstanceOf('Teto\\Functools\\CurriedCallable', $actual_abc); }
/** I combinator */ public static function i($a) { $_ = self::getInstance(); $s = [$_, 's']; /** @var callable $s */ $k = f::curry([$_, 'k']); return $s($k, $k, $a); }
public function test_functools_wrapper() { $f = function () { }; $this->assertEquals(f::arity('explode'), _::arity('explode')); $this->assertEquals(f::tuple('hoge'), _::tuple('hoge')); $this->assertEquals(f::cons("a", "b"), _::cons("a", "b")); $this->assertEquals(f::curry($f), _::curry($f)); $this->assertEquals(f::fix($f), _::fix($f, $f)); $this->assertEquals(f::compose($f, $f), _::compose($f, $f)); }