2012-09-21 40 views
3

我正在使用blaze-html。我终于能够围绕如何使用它了,但是一些monad和转换真的让我一直绊倒我。但是这里有一个特别的绊脚石(出了很多,但我会离开这里再到这里来Happstack的Response和ServerPart单子)。Markup monad如何与Html monad关联?

如果我想字符串文本附加到段落,我要使用此功能(从Text.Blaze.Html5):

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

所有,很好,除了...

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

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

回答

6

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

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

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

+0

奇数。我从本地的cabal/haddock文档开始了Text-Blaze-Html5.html,并且Html链接实际上指向了Text-Blaze-Internal.html。从那里,Html被定义为HtmlM(),它本身被定义为具有很多实例的“data HtmlM a”。没有一个链接指向Text.Blaze.Html中的定义。 –

+0

也许你有一个旧版本的库? –

+0

该文档似乎来自旧版本,@ SavanniD'Gerinel,在blaze-html-0.4。*中,'toHtml'的类型是'ToHtml a => a - > Html',并且没有'Markup'那里。 –