28

因此,在 Haskell 中,这样做真的很容易:

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

这很棒,但我希望能够将一些数据作为字符串从 Haskell 传递到 Elm 语言。这些语言非常相似,如果我有 Read 的 Haskell 实现,我可以轻松地将其手动转换为 Elm。

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

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

4

2 回答 2

33

您可以使用-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:
于 2013-08-30T17:14:35.147 回答
6

对于堆栈:

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

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

于 2019-03-10T10:45:52.737 回答