2016-04-26 28 views
2

我導入此:對象已導入,但編譯器說,這是不是

import Data.Aeson (ToJSON(..), FromJSON(..), (.:), (.=), object, Object(..), decode) 

而且我有這樣的:

instance FromJSON Data123 where 
    parseJSON (Object v) = 
    Data123 <$> v .: "a" 
     <*> v .: "b" 
     <*> v .: "c" 

    parseJSON _ = mzero 

instance ToJSON Data123 where 
    toJSON (Data123 a b c) = 
    object ["a" .= a 
     , "b" .= b 
     , "c" .= c 
    ] 

而且我有一個錯誤說

Not in scope: data constructor ‘Object’ 
    Perhaps you meant variable ‘object’ (imported from Data.Aeson) 

我還沒有導入它嗎?

回答

10

不管你信不信,你有不是還輸入它呢。該Object數據構造函數構造一個Value,所以將其導入,您應該

import Data.Aeson (Value(Object)) 

或相似。你可能以爲你會得到它

import Data.Aeson (Object(..)) 

但實際上進口Object類型別名。在語法上,它似乎也試圖導入與Object類型相關的任何數據構造函數 - 但由於它是別名,因此沒有。 (我想我可能更喜歡GHC是否發出這種事情的警告!)

相關問題