Parsing 如何在Haskell中查看为派生实例/派生生成的代码
因此,在Haskell中,很容易做到这一点:Parsing 如何在Haskell中查看为派生实例/派生生成的代码,parsing,haskell,serialization,typeclass,deriving,Parsing,Haskell,Serialization,Typeclass,Deriving,因此,在Haskell中,很容易做到这一点: data Foo = Bar | Baz deriving (Read, Show) 这很好,但我希望能够将一些数据作为字符串从Haskell传递到Elm语言。这些语言非常相似,如果我有一个Haskell的Read实现,我可以很容易地手工将其转换为Elm 问题是,当我使用派生时,函数是自动生成的,但我实际上看不到它的作用 我想知道,是否有一种方法可以使用Read and Show自动生成用于解析和显示的代码,这样我就可以真正看到代码本身了?
data Foo = Bar | Baz
deriving (Read, Show)
这很好,但我希望能够将一些数据作为字符串从Haskell传递到Elm语言。这些语言非常相似,如果我有一个Haskell的Read实现,我可以很容易地手工将其转换为Elm
问题是,当我使用派生时,函数是自动生成的,但我实际上看不到它的作用
我想知道,是否有一种方法可以使用Read and Show自动生成用于解析和显示的代码,这样我就可以真正看到代码本身了?您可以使用
-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:
对于堆栈:
stack build --ghc-options="-ddump-deriv"
在我的具体案例中,输出是:.stack work/dist/x86_64-linux-nix/Cabal-2.4.0.1/build/app/app tmp/src/