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.

Reply via email to