Есть ли лучший способ выразить этот тип? - PullRequest
2 голосов
/ 11 октября 2011

Я создал этот тип данных, в котором много повторений.

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

Я не хочу, чтобы какое-либо из этих JobStates использовалось без Handle. Но повторение заставляет меня подозревать, что я не выражаю это правильно. Есть ли лучший способ?

1 Ответ

10 голосов
/ 11 октября 2011

Один из способов состоит в том, чтобы выделить это в значение состояния и обертку, которая включает дескриптор:

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
...