Невозможно исправить "Неоднозначную переменную типа" в Эзоне и Споке
У меня есть приложение Спока, где у меня есть это:
post "/test" $ do
a <- jsonBody'
text "test"
Выдает исключение:
• 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
таким образом я попытался решить это так:
post "/test" $ do
a <- jsonBody' :: Aeson.Object
text "test"
но не повезло
• 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
Как это исправить?
Обновить:
это не решает проблему:
a <- jsonBody' :: Aeson.Object
--a :: Aeson.Object <- jsonBody'
let b = show a -- using a
text "fdsfd"
1 ответ
a <- jsonBody' :: Aeson.Object
дает Aeson.Object
в качестве подписи jsonBody'
, Но это не работает: jsonBody'
это не значение, а действие, из которого получается такое значение! Вы, вероятно, хотите поставить эту подпись a
,
{-# LANGUAGE ScopedTypeSignatures #-}
post "/test" $ do
a :: Aeson.Object <- jsonBody'
text "test"
На самом деле, вам, вероятно, ничего подобного не нужно - просто убедитесь, что вы действительно используете a
тогда компилятор, вероятно, сможет самостоятельно определить его тип!