gpt4 book ai didi

haskell - zipper : mapping over last breadcrumb

转载 作者:行者123 更新时间:2023-12-04 15:43:41 25 4
gpt4 key购买 nike

我在使用 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 :>> ATop :>> A :>> B .

ab镜头,我怎样才能从 Top :>> A :>> A ( zAA ) 到 Top :>> A :>> B ( zAB ),不使用 upward - 只是在最后一个面包屑上用镜头映射?

最佳答案

基本上,你不能。

要更改当前焦点的类型,您需要向上移动。您将要“密封”的类型已经在 zipper 内部进行了 promise 。它包含已经让您到达这一点的遍历或镜头的后半部分。您已经打开了镜头或遍历,并且“向上”通过将更改写回周围的上下文来密封更改。

关于haskell - zipper : mapping over last breadcrumb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com