在阅读Lens over Tea #1文章时,我找到了united
镜头。我的实现是
united :: Lens' a ()
united f v = const v <$> f ()
与implementation in the Lens library几乎相同。
让我感到困惑的是为什么我首先想要这样的功能呢?这个镜头有用吗?
答案 0 :(得分:2)
我以前从未见过或曾经使用过这个。但我认为它的有用方式与id
函数(返回未修改的参数)或Identity
monad(没有“效果”的monad)相同;完全等同于不使用monad所有)都很有用。
这些和其他类似的概念(包括()
类型!)基本上都是“无所事事”的结构,所以当你自己看它们时它们似乎毫无用处。但是,当涉及到多态时,它们会变得有用,通过给你一个“无所事事”选项来传递给一般操作。