入力から数字を読む

自分で関数型言語勉強会を開いてみた割にあんまり勉強してなかったものの、ちょっとだけやる気がでてきたんで、とりあえず普通に何かを計算するプログラムとか書いてみようかなぁ…。
と、よく考えたら入力を読んで数字にするやり方がわからん…。適当に調べたら、ShowとReadというクラスがあって、そのメソッドとしてshowとreadという関数が使えて、showによって印字形式に変換されて、それを戻すのがread、という仕組みらしい。なんか遥か昔にちょっとだけ読んで挫折した、Haskell仕様書に書いてあった気がするなぁ…。

main = do line <- getLine
          print $ (read line :: Double)^2

入力の1行目を読んで倍精度浮動小数点数として2乗するだけのプログラム。:: Doubleと書かないとIntegerか何かだと推論されて、小数表現が読めなかったりするようだ。文脈でわかればいいから、別に

main = do line <- getLine
          print $ (read line + 0.0)^2

とかでもよかったりするらしい。