2013-08-30 110 views
20

Vì vậy, trong Haskell, nó thực sự dễ dàng để làm điều này:Làm thế nào để tự động tạo ra (và xem mã cho) Đọc và Show ở Haskell

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

này là rất tốt, nhưng tôi muốn để có thể để truyền một số dữ liệu dưới dạng chuỗi từ Haskell sang ngôn ngữ Elm. Các ngôn ngữ tương tự đủ, nếu tôi đã thực hiện Haskell của Read, tôi có thể dễ dàng chuyển đổi nó thành Elm bằng tay.

Vấn đề là, khi tôi sử dụng phát sinh, chức năng được tạo tự động, nhưng tôi thực sự không thể thấy nó hoạt động như thế nào.

Tôi tự hỏi, có cách nào để tự động tạo mã để phân tích cú pháp và hiển thị bằng cách đọc và hiển thị để tôi thực sự có thể thấy mã không?

Trả lời

27

Bạn có thể sử dụng tùy chọn -ddump-deriv GHC để xem mã cho các trường hợp được thừa kế:

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: