HaskellのIntegerがどのへんでオーバーフローするか調べようとしたら、オーバーフローしなかったでござる

30分プログラム、その593。HaskellのIntegerがどのへんでオーバーフローするか調べてみよう。

HaskellのIntegerはメモリの許す限り任意の桁数が扱えるらしいです。いわゆる、BigNumとかBigIntとか呼ばれてるやつです。
とは言うものの、メモリがいっぱいになったらオーバーフローするだろ、と高を括って挑戦したら、全然オーバーフローしませんでした。やるな、Haskell

使い方

-- Intはオーバーフローする
*Main> overflow (2 :: Int)
1073741824

-- Integerはオーバーフローしない
*Main> overflow (2 :: Integer)

ソースコード

overflow :: (Integral a) => a -> a
overflow x = if x > f x then
                 x
             else
                 overflow $ f x
    where f x = 2 * x