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

Ele*_*fee 10 haskell aeson

我试图在我的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中的代码.