【发布时间】:2016-03-15 04:32:57
【问题描述】:
我想使用模板 haskell 来自动生成 ToJSON (Bar Baz) 或 FromJSON (Bar Baz) 实例。 derivedJSON 是Options -> Name -> Q [Dec] 类型,当类型带参数时,我如何构造Name 类型?
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TemplateHaskell #-}
import Data.Aeson
import Data.Aeson.TH
data Baz = Baz String
class Foo a where
data Bar a :: *
instance Foo Baz where
data Bar Baz = ExampleRecord { exampleField1 :: String
, exampleField2 :: String
}
data Biz = Biz String
instance Foo Biz where
data Bar Biz = ExampleBizRecord1 { biz1 :: String }
| ExampleBizRecord2 { biz2 :: String }
type BarBaz = Bar Baz
-- doesn't work
deriveJSON defaultOptions (''Bar ''Baz)
deriveJSON defaultOptions mkName "Bar Baz"
-- Creates the Name but not supported by Data.Aeson.TH
derive JSON defaultOptions ''BarBaz
Foo将类型作为参数时如何使用deriveJSON?
【问题讨论】:
标签: haskell template-haskell aeson type-families