我已经阅读了有关 Haskell 记录的一些问题,特别是同一模块中的两个元素不能具有相同名称的事实。
我知道您可以通过使用单独的模块来解决此问题,但我不想这样做,而是尝试了这种方法:
class HasX a where
x :: a -> X
data D1 = D1 { d1_x :: X, ... }
instance HasX D1 where
x = d1_x
data D2 = D2 { d2_x :: X, ... }
instance HasX D2 where
x = d2_x
(这只是获取,而不是集合,我当然需要编写更多代码来做集合)。
然而,似乎所有这些的类和实例声明看起来就像样板文件,应该能够使用模板 haskell 或其他东西来消除。
是否有 GHC 的库或扩展可以使这种方法编写起来不那么混乱?