联合镜头的目的是什么?

Lub*_*lář 6 haskell haskell-lens

在通过Lens over Tea#1文章阅读时,我找到了united镜头.我的实施是

united :: Lens' a ()
united f v = const v <$> f ()
Run Code Online (Sandbox Code Playgroud)

这与Lens库中的实现几乎相同.

让我感到困惑的是为什么我首先想要这样的功能呢?这个镜头有用吗?

Ben*_*Ben 2

我以前从未真正见过或使用过这个。但我想它的用处与函数id(返回未修改的参数)或Identitymonad(这是一个没有“效果”的 monad;完全相当于根本不使用 monad)的用处相同。

这些和其他类似的概念(包括()类型!)基本上都是“无所事事”的结构,因此当您单独查看它们时,它们似乎毫无用处。但是,当涉及多态性时,它们会变得有用,通过为您提供“不执行任何操作”的选项来传递给一般操作。