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

Haskell 有没有更好的方式来表达这种类型?,haskell,algebraic-data-types,Haskell,Algebraic Data Types,我创建了这个数据类型,其中有很多重复 data JobState = UnsanitizedData Handle | SanitizedData Handle | VerifiedData Handle | JobFail Handle 我不希望这些JobState中的任何一个都没有手柄。但是这种重复让我怀疑我没有正确地表达这一点。有更好的方法吗?一种方法是将其分解为一个状态值和一个包含句柄的包装器: dat

我创建了这个数据类型,其中有很多重复

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

我不希望这些JobState中的任何一个都没有手柄。但是这种重复让我怀疑我没有正确地表达这一点。有更好的方法吗?

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

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

就这样!这就是我想要的。等我同意的时候,我会接受的。