我正在使用blaze-html。我终于能够总结我的头脑如何使用它,但是一些monad和变换确实让我一直绊倒。但是这里有一个特殊的绊脚石(很多人,但是我将离开这里再到Happstack的Response和ServerPart monad)。
如果我想将字符串文本附加到段落,我必须使用此功能(来自Text.Blaze.Html5):
p . toHtml :: ToMessage a => a -> Html
所有,好,好,除了......
toHtml :: ToMarkup a => a -> Markup
p :: Html -> Html
我尽我所能搜索文档,但我看不出Markup monad和Html monad是如何相互关联的。我如何处理所有类型和类型类?
答案 0 :(得分:6)
它们是同义词(即它们是相同的类型),如documentation中所示。
另外,调用这些类型monad是不正确的。他们只是类型。但是,它们是由monad(MarkupM
)构建的。
作为一种快速检查,如果某个类型由另一种类型参数化(具有种类* -> *
),则可以将其称为monad。这是必要的(但不是充分的)条件。