镜片生成应该像实例一样对待

时间:2014-02-17 23:20:37

标签: haskell lenses

我有另一个库中定义的数据类型。我想用Control.Lens库生成的镜头挂钩到那个数据类型。

我是否需要在我的代码中使用newtype我的类型,或者认为已经定义的数据类型是否安全?

1 个答案:

答案 0 :(得分:6)

您不需要新类型。实际上,许多hackage包用于定义现有类型的镜头(例如,xml-lens甚至lens本身)。

定义实例的问题在于无法隐藏它们。如果您定义镜头,您可以在导入时隐藏它们,就像任何其他功能一样:

import Module.Lens hiding (someGeneratedLens, ...)

实例无法做到这一点(原因见https://stackoverflow.com/a/8731340/2494803)。与实例不同,镜头也不需要全局唯一。