Невозможно исправить "Неоднозначную переменную типа" в Эзоне и Споке

У меня есть приложение Спока, где у меня есть это:

    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тогда компилятор, вероятно, сможет самостоятельно определить его тип!

Другие вопросы по тегам