我试图在我的Haskell代码中启动并运行一个简单的Json解析器,我遇到了Data.Aeson,它似乎是我问题的可行解决方案
{-#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
Run Code Online (Sandbox Code Playgroud)
在GHCi中运行以下内容会导致标题中出现令人讨厌的消息:
decode "{\"f_name\":\"Haskell\", \"l_name\":\"Curry\",\"age\":114}" :: Maybe Person
Run Code Online (Sandbox Code Playgroud)
那么,这里有没有人知道出了什么问题?我几乎完全按照编写的方式跟踪了示例代码,为什么它会失败呢?
fjh*_*fjh 27
在调用decodeghci 之前,您需要这样做:set -XOverloadedStrings,因此字符串文字被视为ByteString而不是String.模块中的pragma仅适用于模块中的代码,而不适用于ghci中的代码.