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

时间:2013-08-30 17:01:54

标签: parsing haskell serialization typeclass deriving

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

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

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

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

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

2 个答案:

答案 0 :(得分:26)

您可以使用-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:

答案 1 :(得分:1)

对于堆栈:

<div 
  className="search-box" 
  tabIndex="1" // add this line
>
  ...
</div>

在我的特定情况下,输出为:stack build --ghc-options="-ddump-deriv"