Control.Lens.Plated.transform не пересекает всю структуру при использовании Data.Data.Lens.uniplate для предоставления экземпляра Plated - PullRequest
2 голосов
/ 26 марта 2020

Я использую 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 для прохождения экземпляра Formula a, переписывающего лист узлы Atom a, обход не входит во вторую "остальную" ветвь конструкции If! Все Formula a в списке внутри конструктора Conjunction пройдены, но пройден только первый Formula a в конструкторе If.

Я не вижу существенной разницы между этим код и пример в Haddock (https://hackage.haskell.org/package/lens-4.2/docs/Control-Lens-Plated.html#t: покрытие )

Что мне здесь не хватает?

...