Я думаю, что я подхожу к этой проблеме принципиально неправильно, но я не уверен, как найти элегантное решение в Haskell.
Я хотел бы написать функцию, которая анализирует строка JSON в какой-то тип Haskell. Однако я не знаю, как передать тип в мою функцию (что я не думаю, что смогу это сделать).
Например, я хотел бы сделать что-то вроде этого:
data Foo = Foo { _a :: String } deriving (Generic, ToJSON, FromJSON)
data Bar = Bar { _b :: String } deriving (Generic, ToJSON, FromJSON)
parseSomething :: (FromJSON a) => a -> Maybe a
parseSomething a = (decode "..some json string...") :: Maybe a
Возможно ли это, или я неправильно думаю о проблеме?
На данный момент я получаю ошибку определения типа:
• Could not deduce (FromJSON a1) arising from a use of ‘decode’
from the context: FromJSON a
bound by the type signature for:
foo :: forall a. FromJSON a => a -> Maybe a
at src/Plumbing/Types.hs:60:1-35
Possible fix:
add (FromJSON a1) to the context of
an expression type signature:
forall a1. Maybe a1
• In the expression: decode "{\"_a\":\"foo\"}" :: (Maybe a)
In an equation for ‘foo’:
foo a = decode "{\"_a\":\"foo\"}" :: (Maybe a)
|
61 | foo a = decode "{\"_a\":\"foo\"}" :: (Maybe a)