2013-12-08 2 views
1

Я пытаюсь понять, какое правильное ограничение на класс, которое нужно использовать для функции, которая хочет поместить код в db с постоянным в Yesod. Для того, чтобы сделать вещи бетон, у меня есть функция, как:Ограничение типа для Yesod Постоянный код

addToDbReturnJson obj = do 
    runDB $ insert obj 
    returnJson obj 

, и я пытаюсь выяснить, что его тип подписи должно быть. Я уверен, что это должно быть что-то вроде

addToDBReturnJson :: (ToJSON валь, SomethingPersist вал) => Вал -> Handler Value

Какого SomethingPersist должно быть? Я рад, что я указал на документацию, которая объясняет типы в Persistent, но я не смог понять это из книги Yesod.

+0

Оставьте это без подписи. Компилятор достаточно умен, чтобы сделать это для вас. –

+0

Загрузите этот файл в ghci, вызовите ': t addToDbReturnJson', чтобы узнать, какой компилятор вывел для вас – Ankur

+0

Да, у меня есть его без подписи типа, и он работает, но мне нравится пытаться понять типы моего кода (плюс избавиться предупреждений компилятора). Я пробовал ghci, и это дает мне 8 строк, которые я не могу понять. – triplepoint217

ответ

1

Это работает для Ме-

addToDbReturnJson::(ToJSON val, PersistEntity val, 
    (PersistEntityBackend val ~ PersistMonadBackend (YesodDB App)))=>val->Handler Value 

Не очень интуитивно, но она смотрит на меня, как и в последней части вы должны указать, что база данных, что значение сигнала подключается к такой же базе данных, что обработчик использует (.... ОК, это имеет смысл, я думаю).

Смежные вопросы