我有另一个库中定义的数据类型。我想用Control.Lens库生成的镜头挂钩到那个数据类型。
我是否需要在我的代码中使用newtype我的类型,或者认为已经定义的数据类型是否安全?
答案 0 :(得分:6)
您不需要新类型。实际上,许多hackage包用于定义现有类型的镜头(例如,xml-lens
甚至lens
本身)。
定义实例的问题在于无法隐藏它们。如果您定义镜头,您可以在导入时隐藏它们,就像任何其他功能一样:
import Module.Lens hiding (someGeneratedLens, ...)
实例无法做到这一点(原因见https://stackoverflow.com/a/8731340/2494803)。与实例不同,镜头也不需要全局唯一。