How to show anything

Contents
  • Standalone deriving
  • When you can’t derive
  • Printing in GHCi with :force
  • Printing with generics

Suppose we have some value that we want to print for debugging.

λ> thePerson = Dog True

λ> thePerson

<interactive>:7:1: error:
    • No instance for (Show Person) arising from a use of ‘print’
    • In a stmt of an interactive GHCi command: print it

Oh no! – The error message

No instance for (Show Person)

is telling us that the author of the Person type didn’t give it a Show instance, so GHCi doesn’t know how to print it for us.

So what can we do?

There is no “universal way to print anything” in Haskell, but there is usually something you can do in this situation. Here we discuss a variety of ways to print a value if there isn’t a Show instance available.