2013-07-17 30 views
9

Tôi đã xác định một ví dụ NumericPreludeRing cho loại dữ liệu của riêng tôi, nhưng không thể xác định one hoặc fromInteger. Khi tôi biên soạn chương trình, tôi không nhận được cảnh báo nào vì lớp Ring có mặc định triển khai đệ quy cùng nhau cho onefromInteger. Kết quả: tràn bộ nhớ rất khó tìm. (Thật vậy, khi sử dụng -XRebindableSyntax, các fromInteger về hằng số số không cần phải rõ ràng, do đó, nó đã được khá khó khăn để tìm ra fromInteger là thủ phạm của tràn ngăn xếp.)Chú thích định nghĩa đầy đủ tối thiểu cho Haskell

Có cách nào để các nhà phát triển chú thích các lớp học cho biết định nghĩa hoàn chỉnh tối thiểu? Nó sẽ rất hữu ích nếu GHC có thể ném một cảnh báo cho các trường hợp không đáp ứng được định nghĩa này, trong khi cho phép một bộ hoàn chỉnh các cài đặt mặc định. Nếu không, thực hành được chấp nhận ở đây là gì? Các nhà phát triển có nên để các phương thức tối thiểu (a?) Của các phương thức không có mặc định sao cho các cảnh báo thích hợp được ném hay chúng ta dựa vào người dùng vào RTFM?

Trả lời

2

Hai cách tiếp cận tôi đã nhìn thấy cơ bản:

  1. Cung cấp giá trị mặc định. Chỉ định định nghĩa hoàn chỉnh tối thiểu trong tài liệu (thường bạn có các tùy chọn; với các mặc định đệ quy hai lần, bạn chỉ cần thực hiện đủ các phương thức để ngắt đệ quy, nhưng bạn có thể chọn bất kỳ phương thức nào bạn thích). Mong đợi các nhà văn dụ để đọc tài liệu.

  2. Không chỉ định mặc định, nhưng cung cấp các chức năng có tên như defaultImplementationOfFoo. Điều đó về cơ bản buộc các nhà văn dụ để yêu cầu một cách rõ ràng cho các mặc định, mà không yêu cầu họ thực sự cung cấp việc thực hiện mặc định. Nhưng họ vẫn phải đọc tài liệu để biết rằng những chức năng đó tồn tại.

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