Я читал о некоторых проблемах с записями 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
(Это только получает, а не устанавливает, мне, конечно, нужно написать больше кода делать сеты ).
Однако,кажется, что объявления классов и экземпляров для всего этого кажутся шаблонными, которые можно устранить, используя шаблонный хэшкел или что-то еще.
Существует ли библиотека или расширение для GHC, которое упрощает написание такого подхода?