Веб-маршруты другого типа возврата

Прохождение учебного пособия happstack-lite:

мы строим функции, которые имеют возвращаемый тип ServerPart Reponse:

homePage :: ServerPart Response

однако в ходе аварийного веб-маршрута наши функции меняют подпись на следующую:

homePage :: RouteT Sitemap (ServerPartT IO) Response

Разве у нас не было ServerPart раньше, а не ServerPartT? Кроме того, есть ли более простой способ переключения на веб-маршруты без изменения сигнатуры каждого метода?

1 ответ

Решение

ServerPart просто определяется как type ServerPart a = ServerPartT IO a, В Happstack 8 мы можем изменить это на type ServerPart = ServerPartT IO что означало бы, что мы могли бы написать такие типы, как RouteT Sitemap ServerPart Response, но до тех пор мы должны использовать ServerPartT непосредственно, потому что синонимы типа не могут быть "частично применены". Однако они одного типа. То есть, ServerPart Response это просто псевдоним для ServerPartT IO Response,

Кроме того, есть ли более простой способ переключения на веб-маршруты без изменения сигнатуры каждого метода?

На самом деле, нет. Мне нравится определять свой собственный тип для "обработчиков" на раннем этапе, тогда я могу просто изменить его определение. Например, type Handler = ServerPart Response а также homePage :: Handler, а потом, когда я добавляю в веб-маршруты, я просто переопределяю Handler type Handler = RouteT Sitemap (ServerPartT IO) Response,

Ваш редактор, вероятно, имеет функцию поиска и замены, например, в Vim:

:%s/:: ServerPart Response/:: RouteT Sitemap (ServerPartT IO) Response/g
Другие вопросы по тегам