我已经制作了这种数据类型,其中有很多重复。
data JobState = UnsanitizedData Handle
| SanitizedData Handle
| VerifiedData Handle
| JobFail Handle
我不希望任何这些JobStates在没有Handle的情况下使用。但重复让我怀疑我没有正确表达这一点。还有更好的方法吗?
答案 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