I meant without having to use a wrapper but still accepting all three. I certainly agree that it not the Go way or the way to go. On Thu, Sep 6, 2018 at 3:16 PM Axel Wagner <axel.wagner...@googlemail.com> wrote: > > On Thu, Sep 6, 2018 at 11:36 PM jimmy frasche <soapboxcic...@gmail.com> wrote: >> >> To unify those cases you need something like haskell-style typeclasses >> where you can say this type satisfies this contract using these >> methods/operators. > > > FWIW, the Go way of doing that is embedding it in a new struct and > overwriting the methods - which is pretty much the only way to do it while > maintaining the property that only the owner of a type can define methods on > it. > > So, you can already do this. But it requires you to write it. Which is > boilerplate. > (which I'm personally fine with, FTR :) ) > >> >> >> >> Even ignoring that, the contracts proposal doesn't let you write a >> generic variadic min/max since there's no way to get the >> smallest/largest value of a type so you can't write >> >> func min(type T ordered)(ts ...T) T { >> min := LargestPossible(T) // not possible >> for _, t := range { >> if t < min { >> min = t >> } >> } >> return min >> } >> >> You could get around that with the signature (firstOne T, rest ...T) >> but there's a larger point about the necessity of knowing numeric >> limits and properties for writing that kind of generic code in there. >> >> >> One way around the asymmetry between operators and methods that >> doesn't introduce any issues like operator methods or any of that is >> to have a package that defines types like >> >> package basic // not the best name >> >> type Int int >> >> type Slice(type T) []T >> >> // and so on for all the primitive and basic composite types >> >> and give all of those methods like Less and At. You'd have to do >> int(min(basic.Int(x), basic.Int(y))) but at least you wouldn't have to >> write the trivial wrapper methods. Not especially pretty. >> >> -- >> 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. >> For more options, visit https://groups.google.com/d/optout.
-- 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. For more options, visit https://groups.google.com/d/optout.