【发布时间】:2012-11-21 23:54:52
【问题描述】:
在我的应用程序的某个地方,我收到了 Parsec 的 Either ParserError MyParseResult。在下游,此结果通过使用其他库完成了一些其他解析。在解析的第二阶段,也可能会出现某种错误,我想将其作为Left String 传递,但为此我也需要将结果从 Parsec 转换为String。为了实现这一点,我需要一个函数,它允许我用show 函数映射Left。
我正在考虑的映射函数看起来像这样:
mapLeft :: (a -> b) -> Either a c -> Either b c
mapLeft f (Left x) = Left $ f x
mapLeft _ x = x
但是我很惊讶没有在 hackage db 上找到任何匹配的东西。所以现在我怀疑我是否使用了正确的方法来解决我的问题。
为什么标准库中没有这样的功能?我的方法有什么问题?
【问题讨论】:
-
不能使用
mapLeft _ x = x,必须是mapLeft _ (Right x) = Right x,参数和结果类型不同。