How do you derive Show for type defined in someone else's library?

haskell, typeclass

Solution

You can use a GHC extension called `StandaloneDeriving`.

With this extension, you can write expressions like:

deriving instance Show Token

To use this, put

{-# LANGUAGE StandaloneDeriving #-}

at the top of your file.

The syntax for a standalone derivation is essentially exactly the same as the syntax for an `instance` statement, except preceded by `deriving` and without a `where` clause. This means you can write more specific instance like:

deriving instance Show a => Foo (Maybe a)

You also have to explicitly give the context needed for your instance. You would have to write a standalone instance like this:

deriving instance Show a => Show (Foo a)

That is, you have to explicitly note the `Show a` context needed.

This shouldn't come up in your case, but it's something to keep in mind.

Problem

I'm using a Haskell library for OAuth and the author didn't derive Show for a type I am using and would like to be able to print out for debugging. I would like to derive Show for it. Is there any way to do this from outside the library, apart from building up a function copies all the record fields into a record type that does derive Show? The type in question is Token from Network.OAuth.Consumer: http://hackage.haskell.org/packages/archive/hoauth/0.3.5/doc/html/src/Network-OAuth-Consumer.html#Token

Original source