Supongamos que tenemos el siguiente:La implementación de la clase Mostrar
data Foo x from_list :: [x] -> Foo x to_list :: Foo x -> [x]
Supongamos que quiero declarar instance (Show x) => Show (Foo x)
tal que muestra un valor produce la llamada adecuada a from_list
. ¿Cómo exactamente hago eso? En particular, ¿cómo implemento showsPrec
para que se cumplan las reglas de precedencia trixy? (Es decir, poner la expresión entre corchetes si y sólo si es necesario.)
Al no ver constructores definidos, no está claro qué lista desea procesar con 'from_list' al mostrar su' Foo x'. ¿Cómo se relacionaría con los campos de Foo? –
No necesita definirlo con 'showsPrec'. Una instanciación completa mínima de 'Show' es simplemente' show', y 'showsPrec' se definirá en términos de ello. El mismo mecanismo permite definir solo uno de '(==)' y '(/ =)' para 'Eq' y obtener el otro de forma gratuita. – danr
Voy por algo como
show foo = "Foo (fromList " ++ show (to_list foo) ++ ")"
, pero usandoshowsPrec
y con el manejo de precedencia correcto. – MathematicalOrchid