キックのために、Haskell で関数を として定義するとどうなるかを確認したかったのですが、Int -> Int
オーバーフローして を返さなければならないことがわかっていInteger
ます。次の点を考慮してください。
factorial :: Int -> Int
factorial n = product [1..n]
factorial 50
これで、 を実行すると、 の「コドメイン」外の数値が取得されることがわかりましたfactorial
。Haskell は非常に厳密に型付けされているため、エラーが返されることを期待していました。代わりに GHCi は奇妙な負の値を返しますInt
:
ghci> factorial 50
-3258495067890909184
そして、それに注意してください
ghci> maxBound :: Int
9223372036854775808
私は64ビットで実行しているので。
Haskell がエラーを発生させないのはなぜですか? そして、なぜfactorial 50
ランダムな負の数を返すのですか? 明確化をいただければ幸いです。