我正在尝试在我的Haskell代码中启动并运行一个简单的Json解析器,我遇到了Data.Aeson,它似乎是我问题的可行解决方案
我跟着example code on the page,经过一些小修改,这就是我得到的:
{-#LANGUAGE OverloadedStrings #-}
import Data.Aeson
import Data.Text
import Control.Applicative
import Control.Monad
data Person =
Person { firstName :: Text
, lastName :: Text
, age :: Int
} deriving Show
instance FromJSON Person where
parseJSON (Object v) =
Person <$> v .: "f_name"
<*> v .: "l_name"
<*> v .: "age"
parseJSON _ = mzero
在GHCi中运行以下内容会导致标题中出现令人讨厌的消息:
decode "{\"f_name\":\"Haskell\", \"l_name\":\"Curry\",\"age\":114}" :: Maybe Person
那么,有没有人知道出了什么问题?我几乎完全按照编写的方式跟踪了示例代码,为什么它失败了?
答案 0 :(得分:26)
在ghci中调用decode
之前,您需要执行:set -XOverloadedStrings
,因此字符串文字被视为ByteString而不是String。模块中的pragma仅适用于模块中的代码,而不适用于ghci中的代码。