从可选的解析器列表中取出一个后续值

时间:2015-04-12 13:02:37

标签: haskell parsec maybe

我有一个带签名的功能

tryParseAllFilesInDir :: FilePath -> [Parsec ByteString () (Maybe a)]

它尝试解析具有特定Parser的目录中的所有文件。 只有一个文件实际上会成功,但我不知道在运行时哪个文件。

我想获取可选Parser列表,并取出唯一的Parser值。我不知道我会用什么功能来实现这个目标。

我不得不从[Parsec ByteString () (Maybe a)] -> [Maybe a]开始,然后[Maybe a] -> Just a

如果有更好的方法来做到这一点,我也会很感激。

1 个答案:

答案 0 :(得分:5)

您可以使用runParser运行解析器。这将为您提供类型[Either ParseError (Maybe a)]的列表;您可以使用partitionEithers仅提取成功的解析。