mapM parseJSON (elems o)
возвращает Parser [Int]
, но вам нужно Parser (Test [Int])
, поэтому правильный способ сделать это:
instance FromJSON Test where
parseJSON (Object o) = Test <$> mapM parseJSON (elems o)
Однако тип аргумента parseJSON
равен Value
значение аргумента не может быть Object
, оно также может быть Array
, String
или т. д., поэтому лучше использовать withObject
, чтобы проверить, что это такое:
instance FromJSON Test where
parseJSON val = withObject "Test"
(\o -> Test <$> mapM parseJSON (elems o))
val
withObject
выведет значимое сообщение об ошибке, если значение типа Value
не равно Object
.