2016-04-26 12 views
2

ich dies importieren:Objekt aus Aeson importiert wurde, aber der Compiler sagt, es ist nicht

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

Und ich habe dies:

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 
    ] 

Und ich habe eine Fehlermeldung,

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

Habe ich es nicht schon importiert?

Antwort

10

Ob Sie es glauben oder nicht, Sie haben nicht importiert es noch. Das Object Daten Konstruktor Konstruiert ein Value, so dass es zu importieren, sollten Sie

import Data.Aeson (Value(Object)) 

oder ähnliches. Sie dachte wahrscheinlich, dass Sie es von

import Data.Aeson (Object(..)) 

aber in der Tat importiert die ObjectTyp alias bekommen würde. Syntaktisch scheint es auch zu versuchen, alle Datenkonstruktoren zu importieren, die dem Object-Typ zugeordnet sind - aber da es ein Alias ​​ist, gibt es keinen. (Ich denke, ich könnte es vorziehen, wenn GHC eine Warnung für diese Art von Sache ausgibt!)

Verwandte Themen