Я читал о некоторых проблемах с записями 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, что делает такой подход менее беспорядочным для записи?