无法将预期类型'Data.ByteString.Lazy.Internal.ByteString'与实际类型'[Char]'匹配

时间:2014-02-24 13:12:05

标签: haskell aeson

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

那么,有没有人知道出了什么问题?我几乎完全按照编写的方式跟踪了示例代码,为什么它失败了?

1 个答案:

答案 0 :(得分:26)

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