2

Simon Peyton-Jones は、「Classes, Jim, but not as we know them」という講演で、型に対する正しい関数を備えた辞書である追加のパラメーターを取る多相関数を持たせることによって、GHC で型クラスを実装する方法について語っています。関数に与えられます。

彼はその後、GHC は関数を特別なケースに入れることで関数を最適化することが多く、実際には実行時にこの辞書を渡さないと述べました。そして、Haskell にはポリモーフィックな再帰があるため、これが常に可能であるとは限らないため、プログラム全体ができたとしても、すべてのポリモーフィズムを排除できるとは限らないと述べました。

これはどういう意味ですか?コンパイル時に多相関数が渡される型がわからないプログラムの例は何ですか?

4

1 に答える 1

3

これは、多相再帰の典型的な例です。リストに似たデータ型があるとしますが、各要素の型は前のものの 2 倍の「大きさ」です。

data Poly a = Nil | Cons a (Poly (a,a)) deriving Show

foo :: Poly Int
foo = Cons 3 (Cons (4,5) (Cons ((6,7),(8,9)) Nil))

length' :: Poly a -> Int
length' Nil = 0
length' (Cons _ xs) = 1 + length' xs

への再帰呼び出しlength'は、元の呼び出しとは異なる型であることに注意してください。

どのようなリストが作成されるかを静的に知ることは不可能であるため、プログラムからすべての辞書を削除することはできません。

于 2013-08-20T17:37:58.620 に答える