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

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

Not this reason:

func Bar[T []byte|map[int]byte](s T) {
    for i, v := range s { _, _ = i, v} // cannot range over s (variable of
type T constrained by []byte|map[int]byte) (type set has no single
underlying type)
}


>
> 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/CAHbs%3DNb133_JRg%2BJCYsdSbZN24OM_pA1S92zY%2BKACEF8MC%3Da6g%40mail.gmail.com.

Reply via email to