I suppose you don't actually need the `is` op; you can use the implements &| 
extends keywords :)

Best,
Richard Miles


> On Jun 26, 2024, at 5:26 PM, Richard Miles <richard@miles.systems> wrote:
> 
>> We've done some initial work related to this as part of PHP Foundation work:
>> <https://github.com/derickr/php-src/tree/collections/Zend/tests/collection>
> 
> After reviewing the PR I don't think this accurately captures what we're 
> attempting to do/discuss. 
> Are there other branches you could share? You’ve posed a lot of new syntax. I 
> have questions.
> 
> collection(Dict) Articles<string => Article> {}
> 
> The code above is limiting compared to the posed syntax in this thread. Since 
> your just working on providing a specific datatype with a custom syntax. What 
> am I supposed to be able todo inside the {}? Why not? 
> 
> collection(Dict<Article>) Articles {}
> 
> or just 
> 
> Dict<Article> Articles {}
> Seq<Article> Articles {}
> 
> and then there's the completely new syntax? Am I supposed to be able to add 
> methods in this block?
> 
> class Articles extends Dict<Article> {}
> 
> If I'm not then it should read more like the following:
> 
> $a = (Dict<Article>) [];
> 
> ____________________________________________________________
> 
> But this all feels off-topic. Because, we need to get Typed Array syntax! 
> 
> 
> interface iArrayA ['a' => string ]
> interface iArrayB implements iArrayA ['b' => string, 'c' => ?string ]
> 
> 
> $array = iArrayA [
>       ‘a’ => ‘hello'
> ];
> // reads the same as a typecast
> $array = (iArrayA &| iArrayB) [
>       ‘a’ => ‘hello'
> ];
> 
> // It’s essentially like a typecast, which should probably be allowed. If the 
> set of possible values needs to increase, a typecast would do it. 
> 
> class A {
>  public iArrayB $array = [ 
>               ‘a’ => ‘hello’,
>               ‘b’ => ‘world'
>       ]; 
> }
> 
> If generics and the is operator get passed then one could in theory do.
> 
> class A <T is iArrayA>{
>        public T $array = [ 
>               ‘a’ => ‘hello’
>       ]; 
> }
> 
> $a = new A<iArrayB>;
> 
> 
> Best,
> Richard Miles

Reply via email to