Performance 控制镜头有性能开销吗?

Performance 控制镜头有性能开销吗?,performance,haskell,lenses,Performance,Haskell,Lenses,我很感激控制镜头的包装。它对稍微弱一点的Haskell记录语法非常有帮助。我在图书馆的某些地方工作,那里的性能是一个问题。是否有人知道,与函数中的基本模式匹配相比,使用通过类型类曝光的简单镜头(如下图所示)会带来什么样的性能损失?使用这样的镜头有可能成为解决记录名称空间冲突问题的一个好办法。我可以自己设置一些基准,但我很好奇是否有人能帮我省去麻烦。谢谢 镜头类别 镜头实例 提供镜头的模块不需要导入Control.Lens包,这太棒了。本页介绍了该库的使用 对于这种类型的镜头,您需要支付少量的性能

我很感激控制镜头的包装。它对稍微弱一点的Haskell记录语法非常有帮助。我在图书馆的某些地方工作,那里的性能是一个问题。是否有人知道,与函数中的基本模式匹配相比,使用通过类型类曝光的简单镜头(如下图所示)会带来什么样的性能损失?使用这样的镜头有可能成为解决记录名称空间冲突问题的一个好办法。我可以自己设置一些基准,但我很好奇是否有人能帮我省去麻烦。谢谢

镜头类别 镜头实例
提供镜头的模块不需要导入Control.Lens包,这太棒了。本页介绍了该库的使用

对于这种类型的镜头,您需要支付少量的性能罚款。它来自所有具有导致字典传递发生的约束的高秩类型

这是一个罕见的情况,当你想回到,没有这个问题,甚至可以使你的代码更快。数据镜头,如果您解码
存储
comonad间接寻址,将使用镜头最直接的表示法:

newtype Lens s a = Lens (s -> (a, a -> s))
虽然库本身不支持多态镜头,但您可以构建自己的镜头类型,这样做仍然可以提供高性能:

newtype Lens s t a b = Lens (s -> (a, b -> t))

出于您的特殊目的,您可能也对该软件包感兴趣。

您应该对其进行基准测试。我来看看data lens。谢谢
newtype Lens s a = Lens (s -> (a, a -> s))
newtype Lens s t a b = Lens (s -> (a, b -> t))