Haskell 从一元动作返回镜头的变通方法
玩游戏时遇到了这个问题 假设我有:Haskell 从一元动作返回镜头的变通方法,haskell,haskell-lens,Haskell,Haskell Lens,玩游戏时遇到了这个问题 假设我有: data Cache = Cache { _a :: Int, _b :: Int } makeLenses ''Cache type Register = Lens' Cache Int 使用Parsec,我可以将字符“a”解析为a::Register,将字符“b”解析为b::Register register = a <$ char 'a' <|> b <$ char 'b' register=a解析u m((Int->f I
data Cache = Cache { _a :: Int, _b :: Int }
makeLenses ''Cache
type Register = Lens' Cache Int
使用Parsec,我可以将字符“a”解析为a::Register
,将字符“b”解析为b::Register
register = a <$ char 'a' <|> b <$ char 'b'
register=a解析u m((Int->f Int)->Cache->f Cache)
我想我理解它的推理——它希望尽可能地浮动类型类约束;为了记录注册表
,这对我来说有点不方便
register = a <$ char 'a' <|> b <$ char 'b'
像这样的情况有没有标准的解决办法?对我有效的解决方案是使用而不是
镜头,如图所示
当您需要将镜头存储在容器中时,也可以使用此类型,因为它是秩-1
然后,我将我的Lens
操作符^.
和%~
替换为它们的alen
等价物,^
和%~
,另一种选择是使用WrappedLens
,这将保持多态性,并避免任何可能需要将alen
转换为Lens
,这会花你一点钱。或者手工制作寄存器
一个秩2的新类型。