如何在fclabels中使用多态数据类型?

时间:2017-05-25 13:20:53

标签: haskell polymorphism lenses

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

那么,为什么我有这些错误以及如何修复它们?

0 个答案:

没有答案