3

我正在使用 blaze-html。我终于能够大致了解如何使用它了,但是一些单子和转换真的让我一直很困惑。但这里有一个特别的绊脚石(在很多中,但我会再离开一天,从这里转到 Happstack 的 Response 和 ServerPart monads)。

如果我想将字符串文本附加到段落,我必须使用这个函数(来自 Text.Blaze.Html5):

p . toHtml :: ToMessage a => a -> Html

一切都很好,除了...

toHtml :: ToMarkup a => a -> Markup
p :: Html -> Html

我已经尽我所能搜索了文档,但我看不到 Markup monad 和 Html monad 是如何相互关联的。我如何处理所有类型和类型类?

4

1 回答 1

6

它们是同义词(即它们是同一类型),如文档中所示。

此外,将这些类型称为 monad 是不正确的。它们只是类型。然而,它们是由 monad ( MarkupM) 构造的。

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

于 2012-09-21T20:45:38.000 回答