Tôi đã gặp sự cố khi sử dụng zippers và lens. Xem xét sau Ví dụ:dây kéo: ánh xạ trên đường dẫn cuối cùng
{-# 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()
Như bạn thấy, tôi có thể di chuyển từ Top :>> A
hoặc để Top :>> A :>> A
và Top :>> A :>> B
.
Có ab
ống kính, làm thế nào tôi có thể di chuyển từ Top :>> A :>> A
(zAA
) để Top :>> A :>> B
(zAB
), mà không sử dụng upward
- chỉ cần lập bản đồ với ống kính trên mẩu bánh mì cuối cùng?