13

我正在尝试在我的 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

在 GHCi 中运行以下命令会导致标题中出现令人讨厌的消息:

decode "{\"f_name\":\"Haskell\", \"l_name\":\"Curry\",\"age\":114}" :: Maybe Person

那么,这里有人知道出了什么问题吗?我几乎完全按照编写的示例代码进行了操作,那么为什么它会失败?

4

1 回答 1

28

在调用decodeghci 之前,您需要做:set -XOverloadedStrings,因此字符串文字被视为 ByteString 而不是 String。模块中的 pragma 仅适用于模块中的代码,不适用于您在 ghci 中所做的事情。

于 2014-02-24T13:41:16.597 回答