Haskell 用于更新树结构的镜头或箭头?

Haskell 用于更新树结构的镜头或箭头?,haskell,haskell-lens,arrows,Haskell,Haskell Lens,Arrows,我遇到了一个(2010年)的例子 对于此处演示的用例,arrow抽象是否比最近的lens更具优势?,这两种方法都试图创建可以同时充当getter和setter的组合功能值。但是,这是一个主观的观点,我认为如果你持谨慎态度,你应该使用镜头。归根结底是图书馆的支持。镜头是 更积极地维护,几乎每天都有客户登陆 基本相同的用户界面(使用将镜头粉碎在一起形成新镜头,而不是使用将箭头粉碎在一起) 可能(某种程度上;更像是演示) 可能 充满了其他好东西(如遍历、折叠和同构)和助手(想想:透镜成泛型、unip

我遇到了一个(2010年)的例子

对于此处演示的用例,
arrow
抽象是否比最近的
lens
更具优势?

,这两种方法都试图创建可以同时充当getter和setter的组合功能值。但是,这是一个主观的观点,我认为如果你持谨慎态度,你应该使用镜头。归根结底是图书馆的支持。镜头是

  • 更积极地维护,几乎每天都有客户登陆

  • 基本相同的用户界面(使用
    将镜头粉碎在一起形成新镜头,而不是使用
    将箭头粉碎在一起)

  • 可能(某种程度上;更像是演示)

  • 可能

  • 充满了其他好东西(如遍历、折叠和同构)和助手(想想:透镜成泛型、uniplate、Monawarder/MonadState)

  • 目前在Haskell社区更受欢迎,例如,有更多的人知道并回答有关堆栈溢出的问题


一个缺点是:
lens
是一个大的ol'包,有着粗糙的类型。

我认为说箭头是关于既能作为一个获取者又能作为一个设定者的说法有点牵强。只是twanvl博客postfirst链接中的箭头在回答中第一个链接没有提到箭头。“参考、箭头和类别”