Parsing 如何在Haskell中查看为派生实例/派生生成的代码

Parsing 如何在Haskell中查看为派生实例/派生生成的代码,parsing,haskell,serialization,typeclass,deriving,Parsing,Haskell,Serialization,Typeclass,Deriving,因此,在Haskell中,很容易做到这一点: data Foo = Bar | Baz deriving (Read, Show) 这很好,但我希望能够将一些数据作为字符串从Haskell传递到Elm语言。这些语言非常相似,如果我有一个Haskell的Read实现,我可以很容易地手工将其转换为Elm 问题是,当我使用派生时,函数是自动生成的,但我实际上看不到它的作用 我想知道,是否有一种方法可以使用Read and Show自动生成用于解析和显示的代码,这样我就可以真正看到代码本身了?

因此,在Haskell中,很容易做到这一点:

data Foo = Bar | Baz
    deriving (Read, Show)
这很好,但我希望能够将一些数据作为字符串从Haskell传递到Elm语言。这些语言非常相似,如果我有一个Haskell的Read实现,我可以很容易地手工将其转换为Elm

问题是,当我使用派生时,函数是自动生成的,但我实际上看不到它的作用


我想知道,是否有一种方法可以使用Read and Show自动生成用于解析和显示的代码,这样我就可以真正看到代码本身了?

您可以使用
-ddump deriv
GHC选项来查看派生实例的代码:

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:
对于堆栈:

stack build --ghc-options="-ddump-deriv"
在我的具体案例中,输出是:
.stack work/dist/x86_64-linux-nix/Cabal-2.4.0.1/build/app/app tmp/src/