- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个类型 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)
makeLenses ''Person
instance FromJSON Person
instance ToJSON Person
{ "_firstName": "James" ... etc} -- The underscore doesn't belong here.
data
中删除下划线。定义本身,然后是
makeLenses
将无法派生所需的 getter 和 setter。
let person = decode blob
let name = person ^. firstName
最佳答案
两个lens
和 aeson
具有允许自定义处理字段和构造函数名称的功能。由于aeson
的默认值不是您想要的,如果您希望镜头名称与 JSON 字段名称相同,无论如何都不会起作用,让我们更改 aeson
配置:
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
import GHC.Generics
import Data.Text hiding (drop)
import Data.Aeson
import Data.Aeson.TH
import Data.Aeson.Types
import Control.Lens
data Person = Person {
_firstName :: Text,
_lastName :: Text,
_age :: Int
} deriving (Show, Generic)
makeLenses ''Person
deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Person
{- alternative Generic version
instance FromJSON Person where
parseJSON = genericParseJSON defaultOptions{fieldLabelModifier = drop 1}
instance ToJSON Person where
toJSON = genericToJSON defaultOptions{fieldLabelModifier = drop 1}
-}
lens
,对应的可配置函数为
makeLensesWith
.
关于json - Aeson 和 Lens 与 DeriveGeneric 和 makeLenses - 名称不对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28123867/
我对 Haskell 很陌生,想使用 makeLenses来自 Control.Lens和类约束与类型同义词一起使我的函数类型更紧凑(可读?)。 我试图提出一个最小的虚拟示例来演示我想要实现的目标,并
很不言自明。我知道makeClassy应该创建类型类,但我认为两者之间没有区别。 PS。解释两者的默认行为的奖励积分。 最佳答案 注意:此答案基于镜头 4.4 或更高版本。那个版本的 TH 有一些变化
是否有 makeLenses 的等价物?对于 GADT?如果我有一个简单的GADT喜欢: data D a b where D :: (Ord a, Ord b) => !a -> !b -> D
我有这个文件: {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ExistentialQuantification #-} module Toy where
我有这个文件: {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ExistentialQuantification #-} module Toy where
假设我有一个类型 Person import GHC.Generics import Data.Text import Data.Aeson import Control.Lens data Pers
我是一名优秀的程序员,十分优秀!