【问题标题】: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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        • 2019-11-13
        • 2013-02-12
        相关资源
        最近更新 更多