Haskell で、自然数の無限リストは [1..] と書きます。でも、本当に無限なのか、疑問を持っていました。型が Integer ではなく、Int であれば、上限があるからです。
ghci で型をチェックしても、なんだかよく分りません。
Prelude> :t [1..] [1..] :: (Enum t, Num t) => [t]
そこで、実験してみました。
僕の環境では、Int の最大値は 2^31 - 1 みたいなので、こうやってみます。
Prelude> [2^31-2..] [2147483646,2147483647,2147483648,2147483649...
ずーと続きます。
一方で、Int だと指定してやると、ちゃんと上限で止まります。
> [2^31-2..]::[Int] [2147483646,2147483647]
型は Integer で、ちゃんとした無限リストのようです。
ここでふと思い立ち、以下のような実験をしました。
Prelude> let a = [1..] Prelude> :t a a :: [Integer]
やっぱり、Integer でした。。。