Обработка формы с помощью Servant

Я хочу создать простой HTML-сайт, содержащий еще более простую форму только с одной кнопкой «Отправить». Для этого я создал следующий Servant API:

type ClientAPI = 
    "prices" :> Get '[HTML] (Html ()) -- returns HTML UI to the user
    :<|> "updatePrices" :> Post '[HTML] (Html ()) -- handles a recalc request

Моя цель — перенаправить пользователя на сайт «цены» после завершения процедуры «updatePrices». Для этого я возвращаю представление «цены» в конце обработчика «updatePrices»:

updatePricesView :: Handler (Html ())
updatePricesView = do
    -- do the required logic here
    pricesView -- return the view for "prices" endpoint

Это работает почти нормально. Единственным недостатком является то, что адрес в моем браузере установлен на "/updatePrices" вместо "/prices". В результате, если я нажму F5, вся процедура будет выполнена еще раз, что немного нелогично.

Это на самом деле заставляет меня задуматься: как правильно обрабатывать форму с помощью Servant? В других языках я обычно реализую это как перенаправление на нужный сайт, но здесь ничего подобного не вижу.


person Alojzy Leszcz    schedule 24.12.2019    source источник
comment
Да, я видел это, но, поскольку он говорит, что это был хакерский способ делать что-то, мне было интересно, есть ли лучшее решение.   -  person Alojzy Leszcz    schedule 24.12.2019