The word "elegant" comes to mind... Comments below.

On Monday, 5 November 2018 21:47:46 UTC+2, Andy Balholm wrote:
>
> The concept of using operators to implement methods cross-pollinated in my 
> mind with Patrick’s “Go Generics with Adaptors” thought experiment and 
> produced this: 
> https://gist.github.com/andybalholm/acecba3acf57bf1254142dadce928890
>
> Here is the core of the proposal (the gist of the gist?):
>
> Contracts
>
> In this proposal, a contract is a list of type-specific functions that are 
> needed to implement a generic algorithm. Generally, it will contain default 
> implementations for these functions, but these are optional. (If default 
> implementations are not included, an adapter will always be necessary.) The 
> default implementations are unconstrained generic code; if they compile 
> successfully with a given set of type parameters, those parameters fulfill 
> the contract.
>
> contract Adder(T) {
>       Zero() T {
>               return 0
>       }
>       Add(a, b T) T {
>               return a + b
>       }
> }
>
> A generic function that uses a contract calls the functions in the 
> contract to perform operations on generic values:
>
> func SumSlice(type T Adder)(s []T) T {
>       sum := Zero()
>       for _, t := range s {
>               sum = Add(sum, t)
>       }
>       return sum
> }
>
> I see that in the proposal (nice and short) you imply a relationship 
between the function invocation and the contract. Is it really implicit (it 
isn't to my sleep-addled brain) that Zero within SumSlice is restricted by 
contract Adder, simply because its argument is of type "type T Adder"? I 
would think that invoking Adder.Zero() or even T.Zero() would be necessary 
or at least more explicit?

In other respects, I doff my hat to you, Andy :-).

The rest of your document (the crucial "adaptors") I still need to 
assimilate.

Lucio.

-- 
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.

Reply via email to