The idea: Use decorators ($, or @, or #) to specify that the type is a generic type.
(Syntax is vaguely follows to * "it is a pointer", so $T becomes a "it is a generic type")
1. Readability - Immediately visible which type is a generic type.
2. Readability - Less braces. Compare
func (type T) RandomItem(a ...T) T { ... }
becomes
func RandomItem(a ...$T) $T { ... }
3. Ability to use decorated interface name as spec for type constrains
func (type T Comparable) Max(a... T) (result T) {...}
might become
func Max(a... $Comparable) (result $Comparable) {...}
4. It does not prevent usage of type keyword if wanted/needed.
Thanks,
Andrey
PS.