パーサーはこちら
readI xs = let (m,e) = break (=='e') xs in
read m * 10^case e of
"" -> 1
('e':'+':p) -> read p
('e':p) -> read p
与える
Main> readI "3e5"
300000
Main> readI "3e+500"
300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Main> readI "3e+500" :: Int
0
Main> readI "3e+500" :: Integer
300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
、我々はそれが整数の答えを与えるが、それが読取り機能のためにやり過ぎだろう負の指数に対処するために試みることができるも
Main> readI "32e-5"
Program error: Prelude.^: negative exponent
。
'Prelude'の中には、あなた自身のパーサを書く必要はありません。 –
あなたの例はghc 7.0.4を使用して私のために働きます(あふれていますが)。 – dave4420
@ dave4420 ghc> = 7.4では動作しません。その前に、報告書によると、iircのいずれかで働いてはいけません。 –