Parsing 处理列表的无读分析错误
您好,有人能告诉我,当在列表中执行时,如何处理Haskell中失败的计算(在我们的例子中是parsings),检索成功的元素 我得到的错误是Parsing 处理列表的无读分析错误,parsing,haskell,maybe,Parsing,Haskell,Maybe,您好,有人能告诉我,当在列表中执行时,如何处理Haskell中失败的计算(在我们的例子中是parsings),检索成功的元素 我得到的错误是 main:Prelude.read:no parse这会停止处理所有列表 我在文本集合上使用表单,对于每个元素,我使用读取::字符串->双精度作为结果值。 目前,第一个元素的解析失败,我无法解析其余的元素。如何使单个元素“可失败”,但仍然得到部分结果(对于可以解析的列表元素) 示例:输入:[“asta”、“1.23”、“2.44”] 所需输出:[1.23,
main:Prelude.read:no parse
这会停止处理所有列表
我在文本集合上使用表单
,对于每个元素,我使用
读取::字符串->双精度
作为结果值。
目前,第一个元素的解析失败,我无法解析其余的元素。如何使单个元素“可失败”,但仍然得到部分结果(对于可以解析的列表元素)
示例:
输入:[“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
单子的方法?文本。Read
库还有一个名为readMaybe
的函数,它返回一个Maybe
而不是像Read
那样的单子
如果您不确定字符串是否可以被解析,那么您显然需要一个或者一个。现在您需要处理Maybe
了,但是Maybe
monad有大量的函数,可以完全满足您的需要
对于更复杂的解析,您可以查看Haskell ParseLib,它非常好。然而,如果您不尝试解析比您的示例更多的内容,那么这可能有点过头了