镜头如何处理脱糖字段是关键字的情况?我似乎记得读过一些特别的东西,但我不记得我在哪里读到它或者“镜头”访问器的名称最终会是什么。
考虑以下:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
import Control.Monad.IO.Class (liftIO)
import Data.Maybe
import Data.Aeson
import Data.Aeson.TH
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.Char8 as LC8
import qualified Data.Text.Lazy.Encoding as TLE
data Typ = Typ {
_fld1 :: BS.ByteString
, _type :: Int
} deriving (Show)
$(deriveJSON tail ''Typ)
$(makeLenses ''Typ)
main = do
print $ typ^.fld1
print $ typ^.getType
where
jsonTyp = "{\"fld1\": \"Test\", \"type\": 1 }"
typ' = decode jsonTyp :: Maybe Typ
typ = fromJust typ'
getType :: Getter Typ Int
getType = to _type
将调用什么_type
访问器以及如何避免在getType
这里实现?
我不得不在哈斯克尔学校抨击这一点,因为我在这里无法访问适当的开发环境,但我认为它可能对其他人有用。当我可以进入 ghci 并做一个(如果给出答案)时,我会添加一个答案:browse
,但同时有人知道吗?
结论
谢谢大家,makeLensesWith
根据爱德华的建议,我将使用关键字到替换的映射。