Psalm
Get started
Documentation
Paid support
Plugins
Blog
GitHub
<?php declare(strict_types=1); /** * @return SplFixedArray<int> */ function getTraversable(): SplFixedArray { return SplFixedArray::fromArray([1, 2, 3]); } /** * @return array<array-key, int> */ function getArray(): array { return [1, 2, 3]; } /** * @template A * @template B * * @param iterable<mixed, A> $lhs * @param iterable<mixed, B> $rhs * @return SplFixedArray<A|B> */ function mergeIterable(iterable $lhs, iterable $rhs): SplFixedArray { return SplFixedArray::fromArray([...$lhs, ...$rhs]); } /** * @template A * @template B * * @param array<array-key, A> $lhs * @param array<array-key, B> $rhs * @return SplFixedArray<A|B> */ function mergeArray(array $lhs, array $rhs): SplFixedArray { return SplFixedArray::fromArray([...$lhs, ...$rhs]); } /** * @template A * @template B * * @param Traversable<mixed, A> $lhs * @param Traversable<mixed, B> $rhs * @return SplFixedArray<A|B> */ function mergeTraversable(Traversable $lhs, Traversable $rhs): SplFixedArray { return SplFixedArray::fromArray([...$lhs, ...$rhs]); } // Works! $_merged_traversable = mergeTraversable(getTraversable(), getTraversable()); /** @psalm-trace $_merged_traversable */; // Works! $_merged_array = mergeArray(getArray(), getArray()); /** @psalm-trace $_merged_array */; // Don't :( $_merged_iterable = mergeIterable(getTraversable(), getTraversable()); /** @psalm-trace $_merged_iterable */;
Snippet created on June 17 2022 at 09:11 UTC
Settings
Get link