Goの型パラメータは型パラメータ以外には利用できない
// 型変数から別の型変数を参照しようとするとコンパイルエラーになる// cannot use a type parameter as constraintfunc ConvertSliceType[S any, T S](xs []T) []Sこの場合は型制約として S を参照しているが、使えない。回避するには関数を挟めばいい。
type Str stringfunc (s Str) String() string { return string(s) }
func ConvertSliceTypeWithFunc[S ~[]E, F func(E) I, E, I any](xs S, fn F) []I { a := make([]I, len(xs)) for i, v := range xs { a[i] = fn(v) } return a}ジェネリックな型エイリアスでも、言語仕様で
type A[P any] = P // illegal: P is a type parameterこれも型を定義しようとしているが、できない。おそらく
type Ints interface { ~int | ~uint }var n Ints // これはできないができない理由と同じで、型制約は型パラメータの制約としてのみ許されているのではないか。