【发布时间】:2017-08-31 08:48:49
【问题描述】:
我有一个接受用户输入的 Haskell 函数和另一个验证该输入的函数。当然,验证可能会失败,在这种情况下,我想返回一条错误消息,提供一些关于错误操作的反馈。
我知道有很多方法可以做到这一点。经过我的一点经验,似乎最好的方法是使用Either String a。让我失望的是我不在乎a。要么失败,我想存储更多信息,要么成功。 a 被浪费了。
使用Maybe String 存储错误消息是一种可接受的方式吗? 我感觉有点倒退,但是完全忽略Either 右侧的值也感觉很糟糕。这里的规范是什么?
【问题讨论】:
-
听起来您正在编写的代码包含一些反模式(在这种情况下,可能是副作用代码)。您通常应该关心
Either值的either 值(没有双关语或混淆意图)——也就是说,在Left和Right的情况下都应该得到适当的处理。 -
@Jules 我同意我应该关心
Either的任一侧,这就是为什么我认为使用Maybe是要走的路。你是说用户输入是反模式吗? -
从语义上讲,您的验证函数可能会返回错误消息,或者不返回错误消息,因此使用
Maybe作为其返回类型看起来完全合理。这不是Either通常暗示的“错误消息”与“正确结果”模式。
标签: haskell types algebraic-data-types