我有一个带签名的功能
tryParseAllFilesInDir :: FilePath -> [Parsec ByteString () (Maybe a)]
它尝试解析具有特定Parser
的目录中的所有文件。 只有一个文件实际上会成功,但我不知道在运行时哪个文件。
我想获取可选Parser列表,并取出唯一的Parser值。我不知道我会用什么功能来实现这个目标。
我不得不从[Parsec ByteString () (Maybe a)] -> [Maybe a]
开始,然后[Maybe a] -> Just a
。
如果有更好的方法来做到这一点,我也会很感激。
答案 0 :(得分:5)
您可以使用runParser
运行解析器。这将为您提供类型[Either ParseError (Maybe a)]
的列表;您可以使用partitionEithers
仅提取成功的解析。