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.