data Message = Message {
type :: String
} deriving (Eq, Show, Data, Typeable)
-- main funciton
let m = decodeJSON "{\"type\":\"event\"}" :: Message
putStrLn (type m)
Haskell新手在这里,我试图解码我从websocket连接收到的消息。但是,Haskell不允许我使用'type'字作为Message类型的属性。如果属性包含类型等单词,那么解码此JSON消息的方法是什么。
答案 0 :(得分:2)
不允许使用type
作为记录类型,您必须进行一些更改。
如果您愿意使用Aeson而不是json包,可以通过手动编写实例来完成此操作,如下所示....
data Message = Message {
type' :: String
} deriving (Eq, Show)
instance FromJSON Message where
parseJSON (Object v) = Message <$> v .: "type"
main = do
let m = decode "{\"type\":\"event\"}" :: Maybe Message
putStrLn (show $ fmap type' m)
你必须稍微改变程序的流程......