は、フィボナッチ数を計算する簡単な関数です:GHCiの中多型のシグネチャを追加するとパフォーマンスが低下するのはなぜですか?ここ
fib :: [Int]
fib = 1 : 1 : zipWith (+) fib (tail fib)
私はすぐにシリーズを計算することができます。実際、少しの実験では、計算がほぼ線形時間で実行されることがわかります。
ghci> last $ take 100000 fib
354224848179261915075 -- takes under a second
Iの代わりに多型であると型シグネチャを変更する場合:
fib :: Num a => [a]
fib = 1 : 1 : zipWith (+) fib (tail fib)
アルゴリズムが遅くなります。実際には、指数関数的な時間で実行されているようです。
多型署名に切り替えると、リストが各段階で完全に再計算されますか?もしそうなら、なぜですか?
[クラス制約付きの型を持つ値は実際には実行時の関数になりますか?](http://stackoverflow.com/questions/7659845/will-a-value-that-has-a class-with-class-constraints-actual-at-ru)を使用して、 –