Oh, sorry, I just re-read. Your example still requires `range` to return
distinct types, so that probably shouldn't work.

On Fri, Nov 12, 2021 at 4:52 PM Axel Wagner <axel.wagner...@googlemail.com>
wrote:

> The error message gives you a reason - there is no single underlying type.
> This works:
>
> type B []byte
> func Bar[T []byte|B](s T) {
>     for range s {}
> }
>
> But yes, your example arguably should be made to work eventually. I would
> suggest filing an issue about that.
>
> On Fri, Nov 12, 2021 at 4:47 PM tapi...@gmail.com <tapir....@gmail.com>
> wrote:
>
>> This one doesn't compile either.
>> So the range operation doesn't support values of parameter types?
>>
>> type MyByte byte
>>
>> func Bar[T []byte|[]MyByte](s T) {
>>     for range s {} // cannot range over s (variable of type T constrained
>> by []byte|[]MyByte) (type set has no single underlying
>> }
>>
>> On Friday, November 12, 2021 at 11:40:53 PM UTC+8
>> axel.wa...@googlemail.com wrote:
>>
>>> On Fri, Nov 12, 2021 at 4:29 PM tapi...@gmail.com <tapi...@gmail.com>
>>> wrote:
>>>
>>>> On Friday, November 12, 2021 at 11:10:17 PM UTC+8
>>>> axel.wa...@googlemail.com wrote:
>>>>
>>>>> `range s` works differently for string and []byte. In the former case
>>>>> it iterates over utf8-encoded unicode codepoints, in the latter it 
>>>>> iterates
>>>>> over bytes.
>>>>>
>>>>
>>>> It is true, but why it matters here?
>>>>
>>>
>>> Because it makes `range` different operations for the purposes of
>>> determining the allowed operations on a type-parameter.
>>>
>>>
>>>>
>>>>
>>>>>
>>>>> On Fri, Nov 12, 2021 at 3:18 PM tapi...@gmail.com <tapi...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>> func Bar[T []byte|string](s T) bool {
>>>>>>     for _, v := range s { // cannot range over s (variable of type T
>>>>>> constrained by []byte|string) (T has no structural type)
>>>>>>         if v > 100 {
>>>>>>             return true
>>>>>>         }
>>>>>>     }
>>>>>>     return false
>>>>>> }
>>>>>>
>>>>>> The message is quite confusing.
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "golang-nuts" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to golang-nuts...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/golang-nuts/44b5f535-adc8-4049-ba41-638f90becc3cn%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/golang-nuts/44b5f535-adc8-4049-ba41-638f90becc3cn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "golang-nuts" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to golang-nuts...@googlegroups.com.
>>>>
>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/golang-nuts/abd83194-8198-40e8-ad12-82953f85fba5n%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/golang-nuts/abd83194-8198-40e8-ad12-82953f85fba5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/golang-nuts/42054eee-a9df-40d1-b148-4e5ead89ee0cn%40googlegroups.com
>> <https://groups.google.com/d/msgid/golang-nuts/42054eee-a9df-40d1-b148-4e5ead89ee0cn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfF-N7%3DApH7bt8WfFeQ99rL8wh%3D0PP1YL4rWVsGk7_TQJQ%40mail.gmail.com.

Reply via email to