Как прочитать строку для числа, начинающегося с десятичной точки в Haskell?

Я - абсолютный новичок в Haskell, который только что обнаружил, что read выдает исключение, когда задается десятичное число, начинающееся с ., а не цифра. Например, в ghci:

Prelude> read ".7" :: Float
*** Exception: Prelude.read: no parse

Я нашел одно обсуждение и это имеет смысл, почему в Haskell требуется окружать . в числах цифрами. Другое обсуждение также несколько полезно, но никто не предлагает решения, как на самом деле преобразовать ".7" в 0.7.

Итак, я пытаюсь извлечь данные из файла формата фиксированной ширины, содержащего поля со значениями типа _7 _--- есть ли стандартная функция или подход, который я могу использовать, чтобы очистить это до числа с плавающей запятой 0.7?

(Прежде чем я затронул эту проблему, мои основные идеи заключались в том, чтобы определить собственный тип для моих данных, использовать splitWidth в Data.List.Split для разделения каждой строки на ее поля, а затем использовать read для преобразования каждого поля в его правильный тип, пытаясь применить функционал добро в этом ответе в реальной реализации.)


person millikan    schedule 22.12.2014    source источник
comment
Я не уверен, что вы ищете. Вы упомянули попытку, но не показали никакого кода. Вы действительно хотите просто myRead = read . ('0':) :: String -> Float?   -  person Thomas M. DuBuisson    schedule 22.12.2014
comment
@ ThomasM.DuBuisson Спасибо, да, это должно сработать! Ваш myRead не будет работать с отрицательными числами, но, к счастью, мне не о чем беспокоиться.   -  person millikan    schedule 22.12.2014


Ответы (1)


Как ответил Томас М. ДюБюиссон в вышеприведенном комментарии, очевидно, что нужно сделать myRead = read . ('0':) :: String -> Float. У меня это работает - я никогда не буду пытаться читать отрицательные числа, и я знаю, какие поля следует читать как float. Спасибо!

person millikan    schedule 23.12.2014