2010-07-09 23 views
5

Gói haskell-src-exts có chức năng in khá tốt một AST Haskell. Điều tôi muốn làm là thay đổi hành vi của nó đối với một số nhà xây dựng nhất định, trong trường hợp của tôi, cách mà các pragmas của SCC được in ra. Vì vậy, mọi thứ khác nên được in theo cách mặc định, chỉ các SCC được xử lý khác nhau. Có thể làm điều đó mà không cần sao chép source file và chỉnh sửa nó, đó là những gì tôi đang làm bây giờ?Sửa đổi máy in đẹp từ haskell-src-exts

Trả lời

2

Vâng, thư viện đã thực hiện một điều đúng, sử dụng loại lớp cho Pretty. Thách thức sau đó là làm thế nào để chọn một trường hợp khác nhau cho các nhà xây dựng bạn muốn in khác nhau. Lý tưởng nhất, bạn sẽ chỉ newtype nút AST bạn quan tâm, và bằng cách nào đó thay thế đó vào AST.

Bây giờ, vấn đề ở đây là AST Haskell được xuất bởi thư viện có cấu trúc kiểu cố định. Nó không, ví dụ sử dụng two-level types, điều này sẽ cho phép bạn thay thế kiểu mới cho các phần của cây. Vì vậy, bạn sẽ phải xác định lại loại AST xuống nút mà bạn muốn thay đổi loại.

+0

Kỹ thuật này có thể được sử dụng như thế nào để thay thế một nút trong AST? Cho phép nói rằng tôi muốn thay thế (trong các định nghĩa từ các giấy trích dẫn) 'Arith' trong' Term' với một số loại tùy chỉnh 'MyArith'. Không phải 'Term' được cố định với định nghĩa của nó để sử dụng 'Arith'? –