Quoting Andy Balholm (2018-10-18 14:00:52) > That would also be a weakness of most of the other proposals, > including my own to add operators to interfaces. Contracts are more > powerful, at the expense of extra complexity.
Fwiw, my own proposal for "just using interfaces" covered the graph use case. The code doesn't look far off from what Burak sketched in a sibling comment, but does have some key differences that I think are important to bridge the gap: https://gist.github.com/zenhack/ad508d08c72fce6df945a49945ad826d#mutually-referential-type-parameters I think adding operators to that proposal actually covers every use case covered by the draft design. I left them out originally because of a snafu with the == operator, but ESR has offered a way around that. --- I feel like Burak's proposal is falling into the same trap as many others: there is a common feeling that operator overloading is a Pandora's box, so folks are trying to work around it by solving the problem without providing operator overloading. But *the problem itself* is not being able to abstract over operators, so this approach is doomed to failure. You just result in a clumsy design that can't decide if it's trying to allow operators to be abstracted over or not, since the whole point is to allow this, but the particulars of the design are motivated by a fear of actually doing so. I there is a fundamental conflict here. You can express the same concepts as with operator overloading if you're willing to wrap the basic types and use methods like .Less() in generic code. But I think fundamentally folks have to make choice: do we want to be able to write `<` for user defined types, or do we want to be able to look at the `<` operator and know for certain that it's not calling a method? You can't have both. -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. For more options, visit https://groups.google.com/d/optout.