Ho letto su alcuni dei problemi con i record Haskell, in particolare, il fatto che due elementi nello stesso modulo non possono avere lo stesso nome.Haskell registra, approccio più pulito?
capisco è possibile aggirare questo avendo moduli separati, ma non ho voglia di farlo e invece provato questo approccio:
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
(Questo non solo ottiene, non imposta, mi piacerebbe ovviamente bisogno di scrivere più codice per fare serie).
Tuttavia, sembra che le dichiarazioni di classe e di istanza per tutto ciò sembrino simili a un boilerplate che dovrebbe poter essere eliminato, utilizzando template haskell o qualcos'altro.
C'è una libreria o un'estensione per GHC che rende questo approccio meno disordinato per scrivere?
Sì, oops. Fisso. – Clinton
È un po 'più complicato di così poiché i due campi potrebbero non avere lo stesso tipo. – augustss
Per i miei scopi, supponiamo che i campi con lo stesso nome abbiano lo stesso tipo. Non avrò campi con lo stesso nome con tipi diversi. – Clinton