我有另一个库中定义的数据类型.我想用Control.Lens库生成的镜头挂钩到该数据类型.
我是否需要在我的代码中使用newtype我的类型,或者认为已经定义的数据类型是否安全?
您不需要新类型.实际上有很多关于hackage的包,它们定义了现有类型的镜头(例如,xml-lens甚至是lens自身).
定义实例的问题是无法隐藏它们.如果你定义镜头,你可以在导入时隐藏它们,就像任何其他功能一样:
import Module.Lens hiding (someGeneratedLens, ...)
Run Code Online (Sandbox Code Playgroud)
实例无法做到这一点(原因请参见/sf/answers/611193831/).与实例不同,镜头也不需要全局唯一.