我正在阅读 Haskell Wiki 中的Zipper 文章,但我无法理解up
定义为的方法:
data Tree a = Fork (Tree a) (Tree a) | Leaf a
data Cxt a = Top | L (Cxt a) (Tree a) | R (Tree a) (Cxt a)
type Loc a = (Tree a, Cxt a)
up :: Loc a -> Loc a
up (t, L c r) = (Fork t r, c)
up (t, R l c) = (Fork l t, c)
在模式up (t, L c r)
中,t
是有焦点的子树,c
是当前焦点处有洞的上下文,向上移动时,为什么c
不向上移动但仍然引用旧上下文?焦点不应该也上去吗?