假设我有一个类型Person
import GHC.Generics
import Data.Text
import Data.Aeson
import Control.Lens
data Person = Person {
_firstName :: Text,
_lastName :: Text,
_age :: Int
} deriving (Show, Generic)
我想为它自动派生 Lenses 和 JSON 类型类
makeLenses ''Person
instance FromJSON Person
instance ToJSON Person
这可以正常工作,但是 DeriveGeneric 将我的字段名称视为带有下划线,并希望我的 JSON 被相应地格式化。
{ "_firstName": "James" ... etc} -- The underscore doesn't belong here.
显然,我可以从data
定义本身中删除下划线,但随后makeLenses
将无法派生所需的 getter 和 setter。
理想情况下,我想做的是这样的
let person = decode blob
let name = person ^. firstName
即,我希望能够派生所有字段名称与我正在使用的 JSON-REST Api 中的值正确对齐的镜头和 JSON 实例,而无需编写太多样板文件。
这似乎是一件直截了当的事情,我觉得我错过了一些明显的东西?