【发布时间】:2015-01-08 16:48:24
【问题描述】:
我在使用 zippers 和 lens 时遇到了问题。考虑以下示例:
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
import Control.Lens
import Control.Zipper
data A = AA { _aa :: A }
| AB { _ab :: B }
deriving (Show)
data B = B deriving (Show)
makeLenses ''A
makeLenses ''B
main :: IO ()
main = do
let a = AA $ AB $ B
z :: Top :>> A
z = zipper a
zAA :: Maybe (Top :>> A :>> A)
zAA = z & within aa
zAB :: Maybe (Top :>> A :>> B)
zAB = z & within (aa . ab)
return ()
如您所见,我可以从Top :>> A 移动到Top :>> A :>> A 和Top :>> A :>> B。
拥有ab 镜头,我如何在不使用upward 的情况下从Top :>> A :>> A (zAA) 移动到Top :>> A :>> B (zAB) - 仅在最后一个面包屑上使用镜头进行映射?
【问题讨论】:
标签: haskell types haskell-lens zipper