2013-08-30 12 views
20

Also, in Haskell, es ist wirklich einfach, dies zu tun:Wie automatisch zu generieren (und den Code für sehen) lesen und Show in Haskell

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

Das ist großartig, aber ich möchte in der Lage sein, um einige Daten als String von Haskell an die Elm-Sprache zu übergeben. Die Sprachen sind ähnlich genug, dass, wenn ich eine Haskell-Implementierung von Read hätte, ich sie leicht von Hand in Elm umwandeln könnte.

Das Problem ist, wenn ich Ableitung verwende, wird die Funktion automatisch erzeugt, aber ich kann nicht wirklich sehen, was es tut.

Ich frage mich, gibt es eine Möglichkeit, den Code für das Parsen und Zeigen mit Read und Show automatisch zu generieren, so dass ich tatsächlich den Code selbst sehen konnte?

Antwort

27

Sie können die die -ddump-deriv GHC Option verwenden Sie den Code für abgeleitete Instanzen zu sehen:

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: