コード例 #1
0
 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);
 }
コード例 #2
0
 /** I combinator */
 public static function i($a)
 {
     $_ = self::getInstance();
     $s = [$_, 's'];
     /** @var callable $s */
     $k = f::curry([$_, 'k']);
     return $s($k, $k, $a);
 }
コード例 #3
0
 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));
 }