3

戻る関数が[Int]あり、リストの合計を取得したいと思います。ただし、個々の要素は。よりも小さいですmaxBound::Intが、合計は間違いなく大きくなります。

(考案された)例:

ghci> sum ([1..10000000] :: [Int])
-2004260032

Integerの代わりに合計を強制的に累積する方法はありIntますか?私はこれを間違って考えていますか?

4

1 に答える 1

11

sumは、入力リスト要素と同じタイプを返します。

sum :: Num a => [a] -> a

[Integer]したがって、を返すには、を渡す必要がありますInteger。入力リストがすでにタイプ[Int]の場合は、次の関数を使用できます。

sum . map fromIntegral

代わりは:

ghci> sum . map fromIntegral $ ([1..10000000] :: [Int])
50000005000000
于 2012-10-05T01:06:39.863 に答える