Возврат JSON из обработчика yesod

Я пытаюсь написать простейший ответ JSON от обработчика Yesod, но у меня какая-то действительно глупая ошибка (видимо). Мой код обработчика таков:

-- HelloYesod/Handler/Echo.hs
module Handler.Echo where

import           Data.Aeson      (object, (.=))
import qualified Data.Aeson      as J
import           Data.Text       (pack)
import           Import
import           Yesod.Core.Json (returnJson)

getEchoR :: String -> Handler RepJson
getEchoR theText = do
  let json = object $ ["data" .= "val"]
  return json

Ошибка такая:

Handler/Echo.hs:12:10:
    Couldn't match expected type `RepJson' with actual type `Value'
    In the first argument of `return', namely `json'
    In a stmt of a 'do' block: return json
    In the expression:
      do { let json = object $ ...;
           return json }
Build failure, pausing...

person Konstantine Rybnikov    schedule 24.06.2013    source источник


Ответы (1)


Я тоже попался на этом: вам просто нужно изменить свою подпись типа, и она будет работать:

getEchoR :: String -> Handler Value

Насколько я понимаю, вся система Rep устарела в Yesod 1.2, поэтому Handler теперь возвращает Html и Value, а не RepHtml и RepJson.

Надеюсь это поможет!

person Mark B.    schedule 24.06.2013
comment
Возможно, стоит проверить этот документ (github.com/yesodweb/yesod/wiki/ Подробный список изменений) для изменений в Yesod 1.2. - person tomferon; 24.06.2013