Используя тип-безопасный URL-адреса через метод setmessage? (шамлет против Гамлета)
Как использовать типобезопасный url-адрес с setMessage?
Я хочу измениться
...
setMessage [shamlet|<span .warning>Warning! See Help.|]
...
К сообщению, содержащему ссылку.
Из того, что я смог собрать до сих пор, это должно работать как-то так
...
renderer <- getUrlRender
let html = [hamlet|<span .warning>Warning! See #
<a href=@{HelpR}> Help!|]
setMessage $ toHtml $ html renderer
...
Но этот код просто дает мне запутанные сообщения об ошибках по всему файлу.
Я действительно читал печатную главу книги Йесод о шекспировских шаблонах, но обнаружил, что она не очень ясна в отношении вовлеченных типов. Например, какой тип производит [hamlet|...|]|
? Без url-интерполяции ghci сообщает t -> Markup
, но с URL-интерполяцией внутри, я просто получаю ошибки.
Меня далее смущают все синонимы типа, например, [shamlet|...|]
доставляет что-то типа Html
, в то время как setMessage
ожидает Html ()
. Я не знаю, как их легко найти: Hoogle часто ничего не находит по теме, В то время как Google всегда находит, возможно, устаревшие версии (с примерами, которые больше не работают) - конечно, я в конечном итоге добираюсь до самой новой версии, но есть ли место, где я получаю легкий обзор над ними? (Может ли ghci перечислить все синонимы для типа?)
1 ответ:
Я думаю, что вы хотите использовать getUrlRenderParams . Как ни странно, сегодня на IRC всплыла соответствующая дискуссия. Шаблоны Hamlet принимают функцию отрисовки URL в качестве своего первого аргумента, и эта функция должна принимать два параметра: типобезопасный URL и список параметров строки запроса. getUrlRender возвращает функцию, которая не принимает параметры строки запроса, поэтому вместо этого вам нужен getUrlRenderParams.