File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 11
11
- [ N-combinators] ( #N-combinators )
12
12
- [ proveTrue] ( #proveTrue )
13
13
- [ toEither] ( #toEither )
14
+ - [ partitionT] ( #partitionT )
15
+ - [ filterNotNull] ( #filterNotNull )
14
16
15
17
# Static analysis
16
18
@@ -349,3 +351,49 @@ $ vendor/bin/psalm-plugin enable fp4php/functional
349
351
return $separated->toEither();
350
352
}
351
353
```
354
+
355
+ - #### partitionT
356
+
357
+ Plugin infers each `list` type from predicates of `partitionT`:
358
+
359
+ ``` php
360
+ <?php
361
+
362
+ declare(strict_types=1);
363
+
364
+ use Tests\Mock\Foo;
365
+ use Tests\Mock\Bar;
366
+ use Tests\Mock\Baz;
367
+
368
+ use function Fp\Collection\partitionT;
369
+
370
+ /**
371
+ * @param list<Foo |Bar|Baz > $list
372
+ * @return array{list<Foo >, list<Bar >, list<Baz >}
373
+ */
374
+ function testExhaustiveInference(array $list): array
375
+ {
376
+ return partitionT($list, fn($i) => $i instanceof Foo, fn($i) => $i instanceof Bar);
377
+ }
378
+ ```
379
+
380
+ - #### filterNotNull
381
+
382
+ Plugin turns all nullable keys to possibly undefined keys:
383
+
384
+ ``` php
385
+ <?php
386
+
387
+ declare(strict_types=1);
388
+
389
+ use function Fp\Collection\filterNotNull;
390
+
391
+ /**
392
+ * @param array{name: string, age: int|null} $shape
393
+ * @return array{name: string, age?: int}
394
+ */
395
+ function example(array $shape): array
396
+ {
397
+ return filterNotNull($shape);
398
+ }
399
+ ```
You can’t perform that action at this time.
0 commit comments