Disclaimer: I don't work on languages. I just don't like the idea of writing contracts.
Instead of specifying the minimal set of operations a type should satisfy, why not describe what the type should look like: func f(in like T) This means 'in' should be a type that has all the operations defined on T. T can be a primitive type, an interface, a derived type, or a struct. That way, you can write interfaces or structs to represent contracts. There is the problem of representing return types: func f(in like T) (out like X) Something like this cannot be used as initializer or on the right-side of :=. But it can be used for something like: var x int x=f(5) where return type is an int. With this, you can write: func Sum(in...like int) like int and this would work for all numeric types that support the same operations as int. Extending the idea, you can write: type T template { f1(like int) f2(like string) } and then use func f(in like T) where f is a function that operates on any type that implements an interface like T. Here, 'template' is a new keyword that defines a template for interfaces. Arrays could also be represented with func f(in []like int) meaning the function takes an array of things that are like int. I have to admit I did not think this through, so there are probably many cases where this won't work. However, it looked like a better alternative than writing contracts. -- 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.