2013-01-05 41 views
13

Thư viện chuẩn cung cấp hàm printf quản lý biến đổi. Tuy nhiên, những gì nó không làm là kiểm tra thời gian biên dịch xem các kiểu đối số có khớp với chuỗi định dạng hay không. Điều đó sẽ đòi hỏi các loại phụ thuộc, và có vẻ như nó sẽ thực sự khó thực hiện quá! (Bạn sẽ phải phân tích cú pháp toàn bộ chuỗi định dạng bằng cách sử dụng chữ ký kiểu ... yuck!)Loại in an toàn

Nhưng trên suy nghĩ, bây giờ tôi tự hỏi ... Chúng ta có thể làm điều này với Mẫu Haskell không? Trong thực tế, có ai đã viết một thư viện cho điều này chưa?

(Dường như bạn có thể khá dễ dàng viết một bán quoter mà đọc một spec định dạng printf và tạo ra các chức năng N-arg cần thiết ...)

Trả lời

8

Có, đó là có thể. Có, nó đã được thực hiện. Bạn thực sự nên kiểm tra hackage cho loại câu hỏi này: http://hackage.haskell.org/package/Printf-TH

+1

Thú vị. Tôi đang nhìn vào Hackage bây giờ, và tôi không thấy ... oh chờ đợi, nó không phải là dưới văn bản, nó dưới Utils. Và wow, nhìn vào tất cả tài liệu mà nó có ... :-( – MathematicalOrchid

+0

@MathematicalOrchid Tôi vừa kiểm tra mã nguồn và có vẻ như tệp không được ghi lại bằng cách sử dụng đánh dấu haddock.Chúng tôi không ai duy trì gói đó ... – Tarrasch

1

Ngoài Printf-TH, có vẻ như printf-mauke có một số TH được ném vào như một suy nghĩ quá ... Bất kỳ ví dụ nào khác?

6

Nếu bạn sẵn sàng chấp nhận rằng "chuỗi định dạng" không thực sự là chuỗi, thì bạn cũng có thể triển khai chức năng giống như printf trực tiếp trong Haskell.

Điều này đã được mô tả, ví dụ, trong một bài báo của Ralf Hinze, được gọi là "Formatting: a class act". Trên Hackage, tôi chỉ có thể tìm thấy gói xformat triển khai một cái gì đó tương tự như cách tiếp cận này.