Сопоставление с образцом в пользовательской реализации Json - PullRequest
1 голос
/ 26 апреля 2020

Допустим, у меня есть такой тип:

data MyError = CustomError | ProcessExecError !SomeException deriving (Show, Generic)

instance ToJSON MyError where
   toJSON = genericToJSON defaultOptions

Это не скомпилируется с:

No instance for (ToJSON SomeException)

Поэтому я переписываю так:

instance ToJSON FlockError where
    toJSON (ProcessExecError _ _) = "ProcessExecError"
    toJSON otherType              = genericToJSON defaultOptions otherType

Это все еще не с:

    • No instance for (ToJSON SomeException)
    arising from a use of ‘genericToJSON’
• In the expression: genericToJSON defaultOptions otherType
  In an equation for ‘toJSON’:
      toJSON otherType = genericToJSON defaultOptions otherType
  In the instance declaration for ‘ToJSON FlockError’
 |
47 |     toJSON otherType              = genericToJSON defaultOptions otherType

Мой вопрос, почему? Почему сопоставление с образцом не позволяет мне написать это, учитывая, что только ProcessExecError имеет аргумент SomeException?

...