2012-09-21 38 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'那裏。 –