Hier ist ein Parser
readI xs = let (m,e) = break (=='e') xs in
read m * 10^case e of
"" -> 1
('e':'+':p) -> read p
('e':p) -> read p
Geben
Main> readI "3e5"
300000
Main> readI "3e+500"
300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Main> readI "3e+500" :: Int
0
Main> readI "3e+500" :: Integer
300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Und auch
Main> readI "32e-5"
Program error: Prelude.^: negative exponent
Wir könnten versuchen, um es mit negativen Exponenten zu machen zu bewältigen, die ganzzahlige Antworten geben, aber das würde viel des Guten für eine Lesefunktion sein.
Nichts im 'Prelude', Sie müssen Ihren eigenen Parser schreiben, fürchte ich. –
Ihr Beispiel funktioniert für mich (obwohl es überläuft) mit ghc 7.0.4. – dave4420
@ dave4420 Funktioniert nicht mehr mit ghc> = 7.4. Es hätte vorher auch nicht nach dem Bericht funktionieren sollen. –