How to view the generated code for derived instances / deriving in Haskell
Asked Answered
I

2

29

So, in Haskell, it's really easy to do this:

data Foo = Bar | Baz
    deriving (Read, Show)

This is great, but I'd like to be able to pass some data as a string from Haskell to the Elm language. The languages are similar enough that, if I had a Haskell implementation of Read, I could easily convert it to Elm by hand.

The problem is, when I use deriving, the function is automatically generated, but I can't actually see what it does.

I'm wondering, is there a way to automatically generate the code for parsing and showing using Read and Show, so that I could actually see the code itself?

Imeldaimelida answered 30/8, 2013 at 17:1 Comment(0)
M
34

You can use the the -ddump-deriv GHC option to see the code for derived instances:

ghc -ddump-deriv test.hs 
[1 of 1] Compiling Test             ( test.hs, test.o )

==================== Derived instances ====================
Derived instances:
  instance GHC.Show.Show Test.FooBar where
    GHC.Show.showsPrec _ Test.Foo = GHC.Show.showString "Foo"
    GHC.Show.showsPrec _ Test.Bar = GHC.Show.showString "Bar"
    GHC.Show.showList = GHC.Show.showList__ (GHC.Show.showsPrec 0)


Generic representation:

  Generated datatypes for meta-information:

  Representation types:
Microeconomics answered 30/8, 2013 at 17:14 Comment(0)
K
7

For stack:

stack build --ghc-options="-ddump-deriv"

Output in my specific case is: .stack-work/dist/x86_64-linux-nix/Cabal-2.4.0.1/build/app/app-tmp/src/

Kermit answered 10/3, 2019 at 10:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.