Let me know if this or something similar was already proposed and rejected for some reason but otherwise...
What if instead of trying to cram all into a single line we use a previous line before the function or type definition explaining how the type parameter aliases are to be interpreted. Like this: ``` types T Stringify func Stringify(s []T) (ret []string) { ... } ``` The prefix line: ``` types T Stringify ``` Only applies to the next code block. IMHO this is more readable, still easy to parse and does not require to overload parenthesis or other punctuation for adding type parameters. Issues with this approach: You need to look at at least two lines to understand an expression fully. - Is that such a big deal? I mean when an interface is mentioned you still need to check that interface definition to fully get it. - Also isn't it worse the mess the cramming together makes? - Following conventions like T or T1, T2 and such you usually still "read" the expression without the types lines. A new keyword `types` is required. - Is it ambiguous vs `type`? We could use another name, but this actually mean `typeParams` or `typeAliases`... usually keywords are single words without camel-case. - Again, is it such a big deal compared to the alternative? ## Sample translated original proposal samples This: ``` func Print2Same(type T)(s1 []T, s2 []T) { ... } ``` Becomes: ``` types T func Print2Same(s1 []T, s2 []T) { ... } ``` And so on: ``` types S Stringer, P Plusser func ConcatTo(s []S, p []P) []string { ... } ``` ``` types L interface{}, T Stringer func StrAndPrint(labels []L, vals []T) { ... } ``` ``` // Stringify2 converts two slices of different types to strings, // and returns the concatenation of all the strings. types T1, T2 Stringer func Stringify2(s1 []T1, s2 []T2) string { ``` ``` // Vector is a name for a slice of any element type. types T type Vector []T ``` ``` // List is a linked list of values of type T. types T type List struct { ``` -- 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/9bc97d4b-a033-4beb-bfbe-3a7c74cae62fn%40googlegroups.com.