4 ms·
In Haskell you can generate a parser to a typed structure using library combinators and code generation: data DataMessage = DataMessage { company :: Text
by yamadapc 10y ago
In Haskell you can generate a parser to a typed structure using library combinators and code generation:
data DataMessage = DataMessage { company :: Text
}
deriving (Show)
$(deriveJSON defaultOptions ''DataMessage)
data DataList = DataList { _data :: [DataMessage]
}
deriving (Show)
$(deriveJSON defaultOptions { fieldLabelModifier = drop 1 } ''DataList)
Which will fail properly when the data is malformed and in the real-world is even shorter, because you can set your data-type to protocol naming conventions and share them throughout.
Then there isn't much bloat. You wrote your types and generated your way to parse them.
You could test with:
main = do
print (encode (DataMessage "some-company"))
print (decode "{\"company\":\"some-company\"}" :: Maybe DataMessage)
print (encode (DataList [DataMessage "c1", DataMessage "c2", DataMessage "c3"]))
print (decode "{\"data\":[{\"company\":\"c1\"},{\"company\":\"c2\"}]}" :: Maybe DataList)
https://gist.github.com/b30f6f09a737dcc980e052b0f3d2a39e https://gist.github.com/b30f6f09a737dcc980e052b0f3d2a39e
- yamadapc 10y agoYou can also generate the types and parsers from a data sample.