1010/**
1111 * Class B.
1212 *
13- * @psalm-template AType
14- * @psalm-template BType
15- * @psalm-template CType
16- *
17- * @psalm-immutable
13+ * @template AType
14+ * @template BType
15+ * @template CType
1816 */
1917final class B extends Combinator
2018{
2119 /**
22- * @psalm-var callable(AType): BType
23- *
24- * @var callable
20+ * @var callable(AType): BType
2521 */
2622 private $ f ;
2723
2824 /**
29- * @psalm-var callable(CType): AType
30- *
31- * @var callable
25+ * @var callable(CType): AType
3226 */
3327 private $ g ;
3428
3529 /**
36- * @psalm-var CType
37- *
38- * @var mixed
30+ * @var CType
3931 */
4032 private $ x ;
4133
4234 /**
4335 * B constructor.
4436 *
45- * @psalm-param callable(AType): BType $f
46- * @psalm-param callable(CType): AType $g
47- * @psalm-param CType $x
48- *
49- * @param callable $f
50- * @param callable $g
51- * @param mixed $x
37+ * @param callable(AType): BType $f
38+ * @param callable(CType): AType $g
39+ * @param CType $x
5240 */
5341 public function __construct (callable $ f , callable $ g , $ x )
5442 {
@@ -58,28 +46,37 @@ public function __construct(callable $f, callable $g, $x)
5846 }
5947
6048 /**
61- * @psalm- return BType
49+ * @return BType
6250 */
6351 public function __invoke ()
6452 {
6553 return ($ this ->f )(($ this ->g )($ this ->x ));
6654 }
6755
6856 /**
69- * @template AParam
70- * @template AReturn
57+ * @template NewAType
58+ * @template NewBType
59+ * @template NewCType
7160 *
72- * @param callable(AParam ): AReturn $f
61+ * @param callable(NewAType ): (NewBType) $f
7362 *
74- * @return Closure(callable(mixed): AParam): Closure(mixed): AReturn
63+ * @return Closure(Closure(NewCType):(NewAType)):( Closure(NewCType):(NewBType))
7564 */
7665 public static function on (callable $ f ): Closure
7766 {
7867 return
79- /** @param callable(mixed): AParam $g */
68+ /**
69+ * @param callable(NewCType):(NewAType) $g
70+ *
71+ * @return Closure(NewCType):(NewBType)
72+ */
8073 static function (callable $ g ) use ($ f ): Closure {
8174 return
82- /** @param mixed $x */
75+ /**
76+ * @param NewCType $x
77+ *
78+ * @return NewBType
79+ */
8380 static function ($ x ) use ($ f , $ g ) {
8481 return (new self ($ f , $ g , $ x ))();
8582 };
0 commit comments