Записи Haskell, более чистый подход?

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

12
задан Clinton 3 May 2012 в 08:56
поделиться