Markup monad如何与Html monad相关联?

时间:2012-09-21 20:41:41

标签: haskell web-frameworks happstack

我正在使用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是如何相互关联的。我如何处理所有类型和类型类?

1 个答案:

答案 0 :(得分:6)

它们是同义词(即它们是相同的类型),如documentation中所示。

另外,调用这些类型monad是不正确的。他们只是类型。但是,它们是由monad(MarkupM)构建的。

作为一种快速检查,如果某个类型由另一种类型参数化(具有种类* -> *),则可以将其称为monad。这是必要的(但不是充分的)条件。