On Sat, Jun 20, 2020 at 3:51 PM jimmy frasche <soapboxcic...@gmail.com> wrote: > > I really like how the latest generics draft has progressed, fantastic > work. The only thing that doesn't really feel perfect yet is type > lists. > > I like the idea of all constraints being interfaces and I get why > interfaces with type lists and/or comparable are only constraints for > now. I'd rather they be valid interfaces. For comparable that has a > natural definition [1], but for type lists it's less obvious. > > [1] https://github.com/golang/go/issues/27481 > > If an interface with a type list is used as a sum type, it generally > would want to restrict on exact type identity, just like a constraint > generally does not want exact type identity. It would be strange if > how the type list matched changed based on context. > > What if type lists could specify for each type whether it wants exact > identity or the kind used in the draft? > > Since this is similar to the difference between > type A B > and > type A = B > I'll use > type =X, Y > to mean X is matched using the rules in the draft but Y must exactly > match, so every example in the draft would need to be prefixed. > > Type assertions and switches could use this notation: > type Str string > var i interface{} = Str("x") > s, ok := i.(=string) // ok is true, s is type string > > switch v.(type) { > case =float32, =float64: > case string: > case =string: > } > (probably the = variety would only be for interfaces with type lists > or perhaps only in generic code). > > It would be rare to want to use exact matches in interfaces as > constraints and rare to use underlying matches in interfaces as > values, but this would let both cases be handled uniformly yet > distinctly.
https://go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-type-parameters.md#type-lists-in-interface-types Ian -- 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/CAOyqgcWAaU2xsZxN-UgyLWyHUai2VTJLHyM17oWyzR_JpVBXOQ%40mail.gmail.com.