我一直在玩 Haskell,尝试使用 Servant 和 Lucid 创建一个非常简单的网站。此刻我达到了“我的代码有效,我不知道为什么”的阶段。我尝试创建引导按钮。根据文档,它应该定义为:
<button type="button" class="btn btn-primary">Primary</button>
所以我找到了 Lucid.Html5 文档:https ://hackage.haskell.org/package/lucid-2.9.11/docs/Lucid-Html5.html并制定了创建按钮的功能:
button_ :: Term arg result => arg -> result
在花了一些时间尝试找出正确的语法之后,我想出了这个:
-- correctly replicates the html pasted above
button_ [type_ "button", class_ "btn btn-primary"] "Primary"
通常情况下,我会称其为胜利并专注于其他任务,但这对我来说似乎是一件真正的魔法。
文档说“button_”是一个函数,它接受一个参数“arg”并返回一个泛型类型“result”的值。但是,在我的应用程序中,“button_”显然需要两个参数并返回“Html ()”。
-- f arg arg again ??
button_ [type_ "button", class_ "btn btn-primary"] "Primary"
它必须对“Term”类型类做一些事情,但我不知道如何理解它。有人可以帮我弄这个吗 ?我尝试将模块加载到 ghci 并使用“:t”检查类型,但这对我没有太大帮助。