9

コード内のいくつかのローカル関数に型シグネチャを追加したいと考えています。ただし、それらの型には、匿名の、存在的にバインドされた型変数が含まれます。匿名なので、型シグネチャの書き方がわかりません。そのような型変数を参照するにはどうすればよいですか?

次の例では、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
4

1 に答える 1

15

ScopedTypeVariables拡張により、型注釈を追加し、g型変数aをスコープに導入できます。

f (T (x_shared:xs) (g :: a -> a -> Int)) = go xs 0

go次に、 withの型シグネチャを記述できますa

go :: [a] -> Int -> Int
于 2013-02-28T03:58:14.497 に答える