1

鉴于:

λ: >import Servant.HTML.Lucid

我创建了一个newtype

λ: >newtype Foo = Foo String

但是,范围内似乎没有ToHtml Foo类型类:

λ: >instance ToHtml Foo

<interactive>:3:10: warning: [-Wmissing-methods]
    • No explicit implementation for
        ‘toHtml’ and ‘toHtmlRaw’
    • In the instance declaration for ‘ToHtml Foo’

还有一个存在于String

λ: >:t toHtml
toHtml :: (Monad m, ToHtml a) => a -> HtmlT m ()
λ: >toHtml "foo"
foo

ToHtml Foo如果没有明确的实例定义,如何获得?

4

1 回答 1

4

Foo需要派生ToHtml类成为该类的实例。因为Foo它可以使用以下方法完成newtypeString

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

我想,这段代码演示了您要查找的内容:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

import Lucid.Base

newtype Foo = Foo String deriving ToHtml

main = print $ toHtml (Foo "foo")
于 2017-09-24T14:32:57.867 回答