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

Mic*_*ard 2 haskell algebraic-data-types

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

data JobState = UnsanitizedData Handle
              | SanitizedData Handle
              | VerifiedData Handle
              | JobFail Handle
Run Code Online (Sandbox Code Playgroud)

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

bdo*_*lan 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
Run Code Online (Sandbox Code Playgroud)