联合镜头的目的是什么?

What is the purpose of united lens?

在阅读 Lens over Tea #1 文章时,我找到了 united 镜头。我的实现是

united :: Lens' a ()
united f v = const v <$> f ()

这与 implementation in the Lens library 几乎相同。

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

我以前从未真正见过或使用过它。但我想它的用处与 id 函数(returns 它的参数未修改)或 Identity monad(这是一个没有 "effects" 的 monad;完全一样等同于根本不使用 monad)很有用。

这些和其他类似的概念(包括 () 类型!)基本上都是 "do-nothing" 结构,因此当您单独看它们时,它们似乎毫无用处。但是当涉及多态性时,它们会变得有用,通过给你一个 "do-nothing" 选项来传递给一般操作。