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

Take a single succeeding value out of a list of optional Parsers

我有一个带有签名的函数

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

它尝试解析目录中具有特定 Parser 的所有文件。 假设只有一个文件会真正成功,但我不知道运行时是哪个文件。

我想取出可选的解析器列表,并取出唯一的后续解析器值。我不知道我会用什么函数来实现这个。

我不知何故必须从 [Parsec ByteString () (Maybe a)] -> [Maybe a] 开始,然后是 [Maybe a] -> Just a

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

您可以 运行 带有 runParser. This will give you a list of type [Either ParseError (Maybe a)]; you can use partitionEithers 的解析器来仅提取成功的解析。