最適化してコンパイルしてみてください。-O2 を指定した GHC 7.4.1 を使用すると、プログラムは非常に高速に実行されます。
$ time ./test
832040
real 0m0.057s
user 0m0.056s
sys 0m0.000s
とありmain = print (febs 30)
ます。
クリス・テイラーの回答におけるポリモーフィズムの考慮事項については、febs 40
OPのポリモーフィック・フィボナッチ関数を次に示します。
$ time ./test
102334155
real 0m5.670s
user 0m5.652s
sys 0m0.004s
そして、これは非ポリモーフィックなものです。つまり、OPの署名が次のように置き換えられていInt -> Int
ます:
$ time ./test
102334155
real 0m0.820s
user 0m0.816s
sys 0m0.000s
Tikhon Jelvis のコメントによると、スピードアップが に置き換えInteger
た結果なInt
のか、それともポリモーフィズムを取り除いた結果なのかを確認するのは興味深いことです。febs
Daniel Fischer のコメントに従って新しいファイルに移動したことを除いて、同じプログラムをもう一度示しfebs :: Integer -> Integer
ます。
$ time ./test
102334155
real 0m5.648s
user 0m5.624s
sys 0m0.008s
繰り返しfebs
ますが、別のファイルで、元と同じポリモーフィック シグネチャを使用します。
$ time ./test
102334155
real 0m16.610s
user 0m16.469s
sys 0m0.104s