Одним из способов решения проблемы является следующая строка:
companyHandler = with session $ method GET getter <|> method POST setter
Другая вещь, которую я считаю полезной, - это специализация сигнатур типов для моего приложения.В этом случае подпись нового типа будет выглядеть следующим образом:
companyHandler :: Handler App App ()
Большую часть времени вы не будете писать универсальный код, который следует многократно использовать в нескольких приложениях, поэтому небольшая потеря общности здесь несделаю тебе больноНаличие более конкретных сигнатур типов обычно упрощает расшифровку сообщений об ошибках, что может помочь при компиляции кода.Даже когда я пишу код, который должен быть универсальным для всех приложений / снэплетов, иногда мне все же полезно начинать с более конкретного типа, а затем обобщать после того, как я его заработаю.
Что dflemstr сказал о withSessionправильный.Обычно я предпочитаю делать с Session один раз вокруг всего, а не помещать его в вызов setInSession, но вы должны делать все, что подходит для вашего приложения.