Я - абсолютный новичок в Haskell, который только что обнаружил, что read
выдает исключение, когда задается десятичное число, начинающееся с .
, а не цифра. Например, в ghci:
Prelude> read ".7" :: Float
*** Exception: Prelude.read: no parse
Я нашел одно обсуждение и это имеет смысл, почему в Haskell требуется окружать .
в числах цифрами. Другое обсуждение также несколько полезно, но никто не предлагает решения, как на самом деле преобразовать ".7"
в 0.7
.
Итак, я пытаюсь извлечь данные из файла формата фиксированной ширины, содержащего поля со значениями типа _7 _--- есть ли стандартная функция или подход, который я могу использовать, чтобы очистить это до числа с плавающей запятой 0.7
?
(Прежде чем я затронул эту проблему, мои основные идеи заключались в том, чтобы определить собственный тип для моих данных, использовать splitWidth
в Data.List.Split
для разделения каждой строки на ее поля, а затем использовать read
для преобразования каждого поля в его правильный тип, пытаясь применить функционал добро в этом ответе в реальной реализации.)
myRead = read . ('0':) :: String -> Float
? - person Thomas M. DuBuisson   schedule 22.12.2014myRead
не будет работать с отрицательными числами, но, к счастью, мне не о чем беспокоиться. - person millikan   schedule 22.12.2014