J'ai une application Spock où j'ai ceci:Impossible de fixer "variable de type Ambigu" dans Aeson et Spock
post "/test" $ do
a <- jsonBody'
text "test"
Il lance une exception:
• Ambiguous type variable ‘a0’ arising from a use of ‘jsonBody'’
prevents the constraint ‘(Aeson.FromJSON a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Aeson.FromJSON Aeson.DotNetTime
ainsi que je l'ai essayé la résolution comme ceci:
post "/test" $ do
a <- jsonBody' :: Aeson.Object
text "test"
mais ont pas eu de chance:
• Couldn't match type ‘ActionCtxT
() (WebStateM() MySession MyAppState)()’
with ‘unordered-containers-0.2.8.0:Data.HashMap.Base.HashMap
T.Text b0’
Expected type: hvect-0.4.0.0:Data.HVect.HVectElim
'[] (SpockActionCtx()() MySession MyAppState())
Actual type: unordered-containers-0.2.8.0:Data.HashMap.Base.HashMap
T.Text b0
Comment le réparer?
mise à jour:
cela ne résout pas le problème:
a <- jsonBody' :: Aeson.Object
--a :: Aeson.Object <- jsonBody'
let b = show a -- using a
text "fdsfd"
Je ne veux pas utiliser l'extension, comment l'archiver sans elle? – Jodimoro
en utilisant "a" n'aide pas. – Jodimoro
'ScopedTypeVariables' est totalement inoffensif, universellement supporté et utile pour la programmation quotidienne de Haskell. Ici, je n'utilise même pas cette extension de toute façon, il suffit de l'utiliser pour lever une restriction syntaxique quelque peu arbitraire. - Mais comme je l'ai dit: si vous utilisez _ a_ (utilisez-le en tant que valeur, pas simplement pour le montrer à 'show' - c'est-à-dire dans une position _monomorphic_) alors vous n'avez pas besoin de signature explicite . Alternativement, vous pouvez l'utiliser dans un endroit polymorphe comme 'show' mais y donner une signature:' show (a :: Aeson.Object) '. Cela n'a pas besoin de 'ScopedTypeVariables'. – leftaroundabout