【问题标题】:zippers: mapping over last breadcrumb拉链:映射到最后一个面包屑
【发布时间】:2015-01-08 16:48:24
【问题描述】:

我在使用 zipperslens 时遇到了问题。考虑以下示例:

{-# 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 镜头,我如何在不使用upward 的情况下从Top :>> A :>> A (zAA) 移动到Top :>> A :>> B (zAB) - 仅在最后一个面包屑上使用镜头进行映射?

【问题讨论】:

    标签: haskell types haskell-lens zipper


    【解决方案1】:

    基本上,你不能。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2016-07-07
      • 2015-09-05
      • 2016-02-14
      • 1970-01-01
      相关资源
      最近更新 更多