コード内のいくつかのローカル関数に型シグネチャを追加したいと考えています。ただし、それらの型には、匿名の、存在的にバインドされた型変数が含まれます。匿名なので、型シグネチャの書き方がわかりません。そのような型変数を参照するにはどうすればよいですか?
次の例では、go
は typeを持っています[b] -> Int -> Int
。ここで、b
はパターン マッチによってバインドされた型T (x_shared:xs) g
です。どの型シグネチャを記述できますか?
data T = forall a. T [a] (a -> a -> Int)
f :: T -> Int
f (T (x_shared:xs) g) = go xs 0
where
-- go :: what type?
go (x:xs) n = go xs $! n + g x_shared x
go [] n = n