10
10
/**
11
11
* Class B.
12
12
*
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
18
16
*/
19
17
final class B extends Combinator
20
18
{
21
19
/**
22
- * @psalm-var callable(AType): BType
23
- *
24
- * @var callable
20
+ * @var callable(AType): BType
25
21
*/
26
22
private $ f ;
27
23
28
24
/**
29
- * @psalm-var callable(CType): AType
30
- *
31
- * @var callable
25
+ * @var callable(CType): AType
32
26
*/
33
27
private $ g ;
34
28
35
29
/**
36
- * @psalm-var CType
37
- *
38
- * @var mixed
30
+ * @var CType
39
31
*/
40
32
private $ x ;
41
33
42
34
/**
43
35
* B constructor.
44
36
*
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
52
40
*/
53
41
public function __construct (callable $ f , callable $ g , $ x )
54
42
{
@@ -58,28 +46,37 @@ public function __construct(callable $f, callable $g, $x)
58
46
}
59
47
60
48
/**
61
- * @psalm- return BType
49
+ * @return BType
62
50
*/
63
51
public function __invoke ()
64
52
{
65
53
return ($ this ->f )(($ this ->g )($ this ->x ));
66
54
}
67
55
68
56
/**
69
- * @template AParam
70
- * @template AReturn
57
+ * @template NewAType
58
+ * @template NewBType
59
+ * @template NewCType
71
60
*
72
- * @param callable(AParam ): AReturn $f
61
+ * @param callable(NewAType ): (NewBType) $f
73
62
*
74
- * @return Closure(callable(mixed): AParam): Closure(mixed): AReturn
63
+ * @return Closure(Closure(NewCType):(NewAType)):( Closure(NewCType):(NewBType))
75
64
*/
76
65
public static function on (callable $ f ): Closure
77
66
{
78
67
return
79
- /** @param callable(mixed): AParam $g */
68
+ /**
69
+ * @param callable(NewCType):(NewAType) $g
70
+ *
71
+ * @return Closure(NewCType):(NewBType)
72
+ */
80
73
static function (callable $ g ) use ($ f ): Closure {
81
74
return
82
- /** @param mixed $x */
75
+ /**
76
+ * @param NewCType $x
77
+ *
78
+ * @return NewBType
79
+ */
83
80
static function ($ x ) use ($ f , $ g ) {
84
81
return (new self ($ f , $ g , $ x ))();
85
82
};
0 commit comments