我一直在考虑是否有一些方法可以添加到Traversable
,以便在昂贵的仿函数存在的情况下使其更便宜。灵感来自Control.Lens.Traversal.confusing
,它使用特殊的Applicative
来做类似的事情。
confusing :: Applicative f => LensLike (Curried (Yoneda f) (Yoneda f)) s t a b -> LensLike f s t a b
不幸的是,confusing
确实辜负了它的名字 - 我不明白它实际在做什么。特别是,我对Curried
没有直觉。
此外,confusing
具有CPS风味,这表明它可能对我的目的来说太严格了。可以为Yoneda
换出Coyoneda
以增强懒惰,但我不知道如何处理Curried
。