2012-10-10 28 views
13

Estoy usando una biblioteca de Haskell para OAuth y el autor no derivó Mostrar para un tipo que estoy usando y me gustaría poder imprimir para la depuración. Me gustaría obtener Show para ello. ¿Hay alguna manera de hacer esto desde fuera de la biblioteca, además de crear una función copia todos los campos de registro en un tipo de registro que derive Show?¿Cómo se obtiene Show para el tipo definido en la biblioteca de otra persona?

El tipo en cuestión es simbólico de Network.OAuth.Consumer:

http://hackage.haskell.org/packages/archive/hoauth/0.3.5/doc/html/src/Network-OAuth-Consumer.html#Token

Respuesta

19

Usted puede utilizar una extensión de GHC llama StandaloneDeriving.

Con esta extensión, puede escribir expresiones como:

deriving instance Show Token 

Para usar esto, puesto

{-# LANGUAGE StandaloneDeriving #-} 

en la parte superior de su archivo.

La sintaxis para una derivación independiente es esencialmente exactamente la misma que la sintaxis de una declaración instance, excepto precedido por deriving y sin una cláusula where. Esto significa que puede escribir una instancia más específica como:

deriving instance Show a => Foo (Maybe a) 

También debe dar explícitamente el contexto necesario para su instancia. Usted tendría que escribir una instancia independiente de esta manera:

deriving instance Show a => Show (Foo a) 

Es decir, hay que señalar explícitamente el contexto Show a necesario.

Esto no debería aparecer en su caso, pero es algo a tener en cuenta.

+0

Gracias eso es lo que necesitaba. – dan

Cuestiones relacionadas