Re: [RFC] Intersection Types
| From: | Josh Di Fabio | Date: | Thu, 28 Apr 2016 09:00:01 +0000 |
| Subject: | Re: [RFC] Intersection Types | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-92863@lists.php.net to get a copy of this message | ||
On Thu, Apr 28, 2016 at 4:54 AM, Levi Morrison <levim@php.net> wrote:
> Internals,
>
> As alluded to last week I have another RFC for improving the type
> system: [intersection types][1].
>
> It allows parameters to define multiple type constraints that must be
> satisfied. Common combinations of our built-in types include
>
ArrayAccess & Traversable & Countable and
> Countable & Iterator.
>
> Some people have suggest I merge this and union types into one RFC.
> For now I'll just proceed with them separately to gain feedback.
>
> [1]: http://wiki.php.net/rfc/intersection_types
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
To me, it seems that intersection types are more useful than union
types (other than the obvious null|Foo and array|Traversable cases) as
they'd allow us to write smaller interfaces and better follow ISP in
userland, with interfaces becoming much more convenient for
documenting the requirements of a parameter.
At present we tend to have incomplete implementations of interfaces
(e.g. throw OperationNotSupportedException). Union types would allow
us to create more, smaller interfaces and avoid situations where the
type of a parameter doesn't accurately reflect the method's true
requirements, or where concretions are incomplete implementations of
an interface.
Thanks for your efforts, Levi, I'm excited about this one!