Markup monad如何与Html monad相关联?

Sav*_*nel 3 haskell web-frameworks happstack

我正在使用blaze-html.我终于能够总结我的头脑如何使用它,但是一些monad和变换确实让我一直绊倒.但是这里有一个特殊的绊脚石(很多人都会这么做,但是我会离开这里再到Happstack的Response和ServerPart monad).

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

p . toHtml :: ToMessage a => a -> Html
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了......

toHtml :: ToMarkup a => a -> Markup
p :: Html -> Html
Run Code Online (Sandbox Code Playgroud)

我尽我所能搜索文档,我看不出Markup monad和Html monad是如何相互关联的.我如何处理所有类型和类型类?

Rom*_*aka 6

它们是同义词(即它们是相同的类型),如文档中所示.

另外,调用这些类型monad是不正确的.他们只是类型.然而,它们是由monad(MarkupM)构造的.

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

  • 啊,我明白了.这是一个已知的错误(在Cabal库中,如果我没有记错的话),这是在新ghc版本中修复的.错误是,最旧的版本不是最新版本,而是生成本地文档索引.您可以通过执行`ghc-pkg unregister blaze-html-0.4.3`然后重新安装新版本来解决它.或者您可以直接在`〜/ .cabal/share/doc`中找到正确版本的文档. (2认同)