首页 > 解决方案 > Control.Lens.Plated.transform 在使用 Data.Data.Lens.uniplate 提供 Plated 实例时不会遍历整个结构

问题描述

我正在使用为以下自相似类型Data.Data.Lens.uniplate定义实例。Plated

data Formula a = Atom a
               | Conjunction [Formula a]
               | If Expr Expr (Formula a) (Formula a)
               deriving (Eq, Ord, Read, Show, Data, Typeable)

instance Plated (Formula a) where
  plate = uniplate

当我调用遍历重写叶子节点Control.Lens.Plated.transform的实例时,遍历不会进入构造的第二个“else”分支!构造函数内部列表中的所有都被遍历,但只遍历构造函数中的第一个。Formula aAtom aIfFormula aConjunctionFormula aIf

我看不出这段代码与 Haddock 中的示例有任何显着差异(https://hackage.haskell.org/package/lens-4.2/docs/Control-Lens-Plated.html#t:Plated

我在这里想念什么?

标签: haskellhaskell-lens

解决方案


推荐阅读