Здравствуйте, может кто-нибудь объяснить, пожалуйста, как вы можете справиться с ошибочными вычислениями (в нашем случае с синтаксическим анализом) в Haskell при выполнении в списке, извлекая успешные элементы?
Я получаю ошибку
main: Prelude.read: no parse
и это останавливает обработку всего списка
Я использую forM
для коллекции Text
, и для каждого элемента я использую
read::String->Double
для значения результата.
В настоящее время синтаксический анализ не выполняется для первого элемента, и я не могу разобрать оставшиеся элементы. Как я могу сделать отдельные элементы "отказоустойчивыми", но все же получить частичные результаты (для элементов списка, которые могут быть проанализированы)?
Пример :
Ввод : ["asta","1.23","2.44"]
Желаемый выход : [1.23,2.44]
import qualified Data.Text as T
parseDfile::[T.Text]->IO [Maybe Double]
parseDfile []=do
return [Nothing]
parseDfile lines = forM lines $ \line ->
do
Prelude.putStrLn ("line value:"++(T.unpack line))
let value = (read::String->Double) . T.unpack $ //fails here for first element
print .show $ value
return (Just value)
P.S
Должен ли я определять метод, используя монаду Maybe
отдельно только для этой одной строки кода?