2014-02-24 90 views
9

我試圖讓一個簡單的Json解析器啓動並運行在我的Haskell代碼中,我遇到了Data .Aeson這似乎是一個可行的解決我的問題無法匹配預期類型'Data.ByteString.Lazy.Internal.ByteString'與實際類型'[Char]'

我跟着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

'decode'預計會有一個'ByteString',並且您已經給出了一個普通的字符串文字(類型爲[Char]')。看看http://hackage.haskell.org/package/bytestring –

+0

我遵循的例子使用了一個普通的字符串...你會假設hackage.haskell.org上的例子寫得正確... –

+5

你可能需要做':在調用'decode'之前,在GHCi中設置-XOverloadedStrings'。 – fjh

回答

23

在ghci中調用decode之前,你需要做:set -XOverloadedStrings,所以字符串文字被視爲ByteString而不是String。模塊中的編譯指示僅適用於模塊中的代碼,而不適用於ghci中的代碼。

相關問題