2013-05-18 35 views
7

Tôi đang thực hiện một gói nhỏ mà định nghĩa hàm bao cho các bộ và bổ sung thêm trường hợp hình thành chúng, nhưCách tạo gói không phải TH từ mã được tạo bằng cách sử dụng Mẫu Haskell?

newtype Tuple2 a = Tuple2 { untuple2 :: (a, a) } 
    deriving (...) 

tuple2 :: a -> a -> Tuple2 a 
tuple2 = ... 

instance Traversable Tuple2 where ... 
instance Foldable Tuple2 where ... 
instance Functor Tuple2 where ... 
instance Applicative Tuple2 where ... 

này lặp đi lặp lại 2-15, vì vậy nó trông giống như một công việc dành cho Bản mẫu Haskell.

Mã được tạo luôn tương thích với Haskell 98, vì vậy tôi muốn kết quả cuối cùng là gói tương thích Haskell 98. Có thể tạo một đoạn mã bằng cách sử dụng Mẫu Haskell và tạo một gói từ mã không sử dụng TH không? (Tôi muốn một cách tự động, nếu có thể.)

Trả lời

3

Có các công cụ cho nó:

  • EvilSplicer, được viết bởi Joey Hess trước khi ông phát hiện ra
  • zeroth, mà dường như không có trong phát triển tích cực nữa.

Tuyên bố từ chối trách nhiệm: Tôi chưa tự mình thử bất kỳ điều nào trong số này.

+0

Tôi đã cố gắng chạy nhưng không biên dịch. Tôi sẽ cố gắng liên lạc với tác giả gốc. –

2

Bạn luôn có thể viết chương trình Haskell để xuất mã nguồn Haskell dưới dạng tệp văn bản thông thường. Sau đó, bạn có thể biên dịch giống như bất kỳ tệp nào khác.

Điều này không cung cấp cho bạn, tất nhiên:

  • Cú pháp kiểm tra. (Ví dụ: mã bạn tạo có thể chứa lỗi cú pháp.)
  • Khả năng kiểm tra mã viết tay đã được biên dịch.
  • Khả năng sử dụng các tính năng GHC khác như suy luận kiểu.
+0

Một thời gian dài trước khi TH và syb, tôi đã viết rất nhiều chương trình viết chương trình mà tôi đã viết một chương trình viết chương trình bằng văn bản chương trình. Nó đọc mã nguồn từ một tệp .rtf và đặt mã ở mỗi cấp độ khác nhau dựa trên màu của văn bản! Tôi không chắc liệu tôi có bao giờ chuyển nó từ Gofer sang Haskell hay không, nhưng dù sao cũng vui. – AndrewC

+0

Đó là một lựa chọn, vâng, nhưng câu hỏi của tôi được hỏi cụ thể cho một giải pháp TH. –

Các vấn đề liên quan