or1ko's diary

日々を書きます

合計を求めるプログラム

標準入力の各行にある数の合計を求めるプログラムを書いた。

main = do
        cs <- getContents
        print . sum . map read $ lines cs

以前はread関数を知らなかったので、ord関数とリスト操作を頑張ってやっていた。
readってすばらしい。けど、実数は読めないみたいだ。パースに失敗するエラーがでる。

追記
nさんのコメントに従って、書き直してみた。
odzさんのトラックバックに従って、警告を出すようにした。

main = do
        cs <- getContents
        print . sum . map (read :: String -> Double) $ lines cs

そんで、コンパイルあんど実行。

ghc -Wall sum.hs -o sum
$ sum.hs:1:0:
    Warning: Definition but no type signature for `main'
$ more test.txt 
1.1
2.2
3.3
4.4
5.5
$ ./sum < test.txt
16.5

mainのシグネチャを定義してないと注意がでるけども、動いた。
型をしっかりと指定すべきということなんすね。
通りすがりのnさん。ありがとうございます。
警告を出していれば、解かったはずでした。
odzさん。ありがとうございます。