如何在Haskell中自动生成(并查看代码)Read and Show

jmi*_*ite 21 serialization parsing haskell typeclass deriving

所以,在Haskell中,执行此操作非常简单:

data Foo = Bar | Baz
    deriving (Read, Show)
Run Code Online (Sandbox Code Playgroud)

这很棒,但我希望能够将一些数据作为字符串从Haskell传递给Elm语言.语言足够相似,如果我有一个Haskell实现的Read,我可以轻松地将它转换为Elm.

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

我想知道,有没有办法自动生成解析和显示使用Read和Show的代码,这样我才能真正看到代码本身?

ben*_*ofs 27

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

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:
Run Code Online (Sandbox Code Playgroud)


Chr*_*ski 6

对于堆栈:

stack build --ghc-options="-ddump-deriv"
Run Code Online (Sandbox Code Playgroud)

在我的具体情况下的输出是: .stack-work/dist/x86_64-linux-nix/Cabal-2.4.0.1/build/app/app-tmp/src/