为 Newtype 派生“ToHtml”?
Deriving `ToHtml` for Newtype?
鉴于:
λ: >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
?
Foo
需要派生 ToHtml
class 成为那个 class 的实例。
由于 Foo
是 String
的 newtype
,因此可以使用:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
我想,这段代码演示了您要查找的内容:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Lucid.Base
newtype Foo = Foo String deriving ToHtml
main = print $ toHtml (Foo "foo")
鉴于:
λ: >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
?
Foo
需要派生 ToHtml
class 成为那个 class 的实例。
由于 Foo
是 String
的 newtype
,因此可以使用:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
我想,这段代码演示了您要查找的内容:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Lucid.Base
newtype Foo = Foo String deriving ToHtml
main = print $ toHtml (Foo "foo")