【问题标题】:How to view the generated code for derived instances / deriving in Haskell如何在 Haskell 中查看派生实例/派生的生成代码
【发布时间】:2013-09-03 11:41:28
【问题描述】:
所以,在 Haskell 中,这样做真的很容易:
data Foo = Bar | Baz
deriving (Read, Show)
这很好,但我希望能够将一些数据作为字符串从 Haskell 传递到 Elm 语言。这些语言非常相似,如果我有 Read 的 Haskell 实现,我可以轻松地将其手动转换为 Elm。
问题是,当我使用派生时,函数是自动生成的,但我实际上看不到它的作用。
我想知道,有没有一种方法可以使用 Read 和 Show 自动生成用于解析和显示的代码,以便我可以真正看到代码本身?
【问题讨论】:
标签:
parsing
haskell
serialization
typeclass
deriving
【解决方案1】:
您可以使用-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:
【解决方案2】:
对于堆栈:
stack build --ghc-options="-ddump-deriv"
在我的具体情况下的输出是:.stack-work/dist/x86_64-linux-nix/Cabal-2.4.0.1/build/app/app-tmp/src/