如何将动作传递给 Application.Helper.View

How to pass an action into Application.Helper.View

Application.Helper.View 中,我想创建一个 HTML 组件,例如:

button :: action -> Text -> Html
button action label = [hsx|<a href={urlTo action}>{label}</a>|]

我可以在各种视图中使用它,例如:{button NewSessionAction "Login"}

但是,动作的正确类型签名是什么?检查 urlTo (https://ihp.digitallyinduced.com/api-docs/src/IHP.RouterSupport.html#urlTo) 的来源显示 action 符合 HasPath 但我仍然不确定我应该如何编写我的函数。

我是 Haskell 的新手,所以任何指导以及“为什么”都会有很大帮助。

(@pedrofurla 和@MarcScholten 的回答)

  1. 导入IHP.RouterPrelude:
import qualified IHP.RouterPrelude as Router
  1. 将 HTML 组件函数更改为如下所示:
button :: (?context :: context, ConfigProvider context, Router.HasPath action) => action -> Text -> Html
button action label = [hsx|<a href={Router.urlTo action}>{label}</a>|]