我在另一个库中定义了一个数据类型。我想用 Control.Lens 库生成的镜头连接到该数据类型。
我是否需要在我的代码中重新输入我的类型,或者是否可以安全地使用已定义的数据类型?
你不需要新类型。实际上有很多关于 hackage 的包为已经存在的类型(例如,xml-lens
甚至lens
它本身)定义了镜头。
定义实例的问题在于无法隐藏它们。如果你定义了镜头,你可以在导入时隐藏它们,就像任何其他功能一样:
import Module.Lens hiding (someGeneratedLens, ...)
这对于实例是不可能的(有关原因,请参见https://stackoverflow.com/a/8731340/2494803 )。与实例不同,镜头也不需要是全局唯一的。