有没有更好的方式来表达这种类型?

时间:2011-10-11 01:11:12

标签: haskell algebraic-data-types

我已经制作了这种数据类型,其中有很多重复。

data JobState = UnsanitizedData Handle
              | SanitizedData Handle
              | VerifiedData Handle
              | JobFail Handle

我不希望任何这些JobStates在没有Handle的情况下使用。但重复让我怀疑我没有正确表达这一点。还有更好的方法吗?

1 个答案:

答案 0 :(得分:10)

一种方法是将其分解为状态值,以及包含句柄的包装器:

data JobState = UnsanitizedData | SanitizedData | VerifiedData | JobFail
  deriving (Eq, Enum, Ord, Show, Read)
data Job = Job { jobState :: JobState, jobHandle :: Handle }
-- or: data Job = Job JobState Handle