【发布时间】:2011-12-24 17:11:24
【问题描述】:
我定义了以下记录:
data Option = Option {
a :: Maybe String,
b :: Either String Int
} deriving (Show)
我有没有强制要求当 a 是 Nothing 时 b 必须是 Left 而当 a 是 Just 时 b 必须是 Right?也许有幻影类型,或者其他什么?还是我必须将整个东西包裹在一个 Either 中并使其成为 Either String (String, Int) ?
【问题讨论】:
-
我认为 Haskell 2010 在您以前的解决方案中没有任何允许这样做的东西。我建议使用
Either String (String, Int),或同构类型,例如data Option = OptionA String | OptionB String Int,其中构造函数具有合理的名称。 -
为了最好地回答这个问题,了解
a和b所附的含义 很重要。为什么有时您没有a(例如Nothing)?为什么可以将b表示为String或Int?你为什么要执行你所说的限制?这给我的初步印象是b定义不明确。