read

http://www.zvon.org/other/haskell/Outputprelude/Read_c.html
http://www.zvon.org/other/haskell/Outputprelude/read_f.html

readは主に、文字列で表記された数値をIntegerなりFloatなりに変換するための関数(かどうかは知らないが)。Readって便利だな〜と。derivingもできる。

--Pnyaは特に意味のないデータ構造
data Pnya = Pnyi Integer | Pnyu Float | Pnyo Pnya Pnya deriving (Show,Read,Eq)

とかして

*Main> (read "(Pnyo (Pnyi 3) (Pnyo (Pnyu 3.2) (Pnyi 4)))")::Pnya
Pnyo (Pnyi 3) (Pnyo (Pnyu 3.2) (Pnyi 4))

何でもS式な世界だと、readで読んだときに、余分なものまで読んじゃって(上の例だと、(Hoge 3)みたいなのがどっかに入ってるとか)、その後の処理でそういうのを弾かないといけないのでアレかな〜。まあ、別にそれで不便を感じたこともないけど。あと、S式の最大の問題は、世の中のデータの殆どはS式で表現されてないことだと個人的に思うので、Haskellだと、標準で強力なパーサが付いてて、即席でreadをでっちあげるのが簡単でよいとかそんなことを思った。どうでもいいけど、(read "+3.2")::Floatとか、(read "+3")::Integerがエラーになるのはあれなんでないかな。