Haskell 镜头生成应该像实例一样处理吗
我在另一个库中定义了一个数据类型。我想用Control.lens库生成的镜头连接到该数据类型Haskell 镜头生成应该像实例一样处理吗,haskell,lenses,Haskell,Lenses,我在另一个库中定义了一个数据类型。我想用Control.lens库生成的镜头连接到该数据类型 我是否需要在代码中重新键入我的类型,还是认为使用已定义的数据类型是安全的?您不需要新类型。实际上,hackage上有许多包为现有类型(例如,甚至是lens本身)定义了镜头 定义实例的问题在于无法隐藏它们。如果定义了镜头,则可以在导入时将其隐藏,就像任何其他功能一样: 导入模块。镜头隐藏(someGeneratedLens,…) 对于实例,这是不可能的(有关原因,请参阅)。与实例不同,镜头也不要求全局唯
我是否需要在代码中重新键入我的类型,还是认为使用已定义的数据类型是安全的?您不需要新类型。实际上,hackage上有许多包为现有类型(例如,甚至是
lens
本身)定义了镜头
定义实例的问题在于无法隐藏它们。如果定义了镜头,则可以在导入时将其隐藏,就像任何其他功能一样:
导入模块。镜头隐藏(someGeneratedLens,…)
对于实例,这是不可能的(有关原因,请参阅)。与实例不同,镜头也不要求全局唯一 我想说,为已经定义的类型提供镜头(以及其他相关的东西)是安全的。事实上,lens库可以做到这一点(
[]
,可能
,等等)。使用实例不安全的唯一原因是实例是全局的,并且必须是唯一的。透镜既不是全局性的,也不要求是唯一符合其类型的透镜。