He leído acerca de algunos de los problemas con los registros Haskell, en particular, el hecho de que dos elementos en el mismo módulo no pueden tener el mismo nombre.Haskell records, un enfoque más limpio?
entiendo puede solucionar esto por tener módulos separados, pero yo no quería hacer eso y en cambio trataron este enfoque:
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
(Esto sólo se consigue, no juegos, que había por supuesto, necesita escribir más código para hacer conjuntos).
Sin embargo, parece que las declaraciones de clase y de instancia para todo esto parecen un tipo de repetitivo que debería poder eliminarse, utilizando plantillas de haskell u otra cosa.
¿Hay alguna biblioteca o extensión en GHC que haga que este enfoque sea menos complicado de escribir?
Sí, oops. Fijo. – Clinton
Es un poco más complicado que eso ya que los dos campos pueden no tener el mismo tipo. – augustss
Para mis propósitos, suponga que los campos con el mismo nombre tienen el mismo tipo. No tendré campos con el mismo nombre que tengan diferentes tipos. – Clinton