6

ジッパーレンズの使用で問題が発生しました。次の例を検討してください。

{-# 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 :>> ATop :>> A :>> B

レンズがあれば、レンズを使用せずに( ) から( )abに移動するにはどうすればよいですか?Top :>> A :>> AzAATop :>> A :>> BzABupward

4

1 に答える 1