TL; DR:我想将fclabels
与我的多态数据类型一起使用,但是使用它获取有线错误。
data R a = A { cb :: a }
| B { cb :: a, cd :: a}
deriving (Show, Read, Eq)
所以,我的类型是具有不同字段数的多个变体的总和。有些字段名称相同,对我来说很重要。
当我将其转换为下划线版本并运行mkLabel
模板时:
data R a = A { _cb :: a }
| B { _cb :: a, _cd :: a }
deriving (Show, Read, Eq)
mkLabel ''R
我有一些我不理解的错误:
λ :load AminoAcidLens.hs
[1 of 1] Compiling AminoAcidLens ( AminoAcidLens.hs, interpreted )
AminoAcidLens.hs:13:1: error:
Multiple declarations of ‘cb’
Declared at: AminoAcidLens.hs:13:1
AminoAcidLens.hs:13:1
AminoAcidLens.hs:13:1: error:
Duplicate type signatures for ‘cb’
at AminoAcidLens.hs:13:1-11
AminoAcidLens.hs:13:1-11
AminoAcidLens.hs:13:1: error:
Duplicate INLINE pragmas for ‘cb’
at AminoAcidLens.hs:13:1-11
AminoAcidLens.hs:13:1-11
Failed, modules loaded: none.
如果我将_cd
的类型更改为其他类型,则错误消失:
data R a = A { _cb :: a }
| B { _cb :: a, _cd :: Int }
deriving (Show, Read, Eq)
mkLabel ''R
那么,为什么我有这些错误以及如何修复它们?