Я определил следующий объект типа данных в Haskell:
import GHC.Generics
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as C
import Data.Maybe (fromJust)
data DLA = DLA {
a::String,
b::Int,
c::Int,
d::String,
e::[Int]
} deriving (Show, Generic)
instance FromJSON DLA
instance ToJSON DLA
И получить массив json из какого-либо фронтенд-приложения в следующем формате
[\"hello\",3,2,\"world\",[1,3,5]]
Когда я попытался разобрать это как
decode $ C.pack "[\"hello\",3,2,\"world\",[1,3,5]]"::Maybe DLA
просто вернул Nothing
. Попытка передать это более общее как
decode $ C.pack "[\"hello\",3,2,\"world\",[1,3,5]]"::Maybe Value
вернул следующий вывод:
Just (Array [String "hello",Number 3.0,Number 2.0,String "world",Array [Number 1.0,Number 3.0,Number 5.0]])
Так что, похоже, проблема в том, что Haskell интерпретирует строку как массив, а не объект, и, таким образом, правильно выдает исключение. Любые идеи, как это исправить?
Я использую текущую версию ghc и ghci и Data.Aeson для этого.