Khi làm việc với các thể hiện có nguồn gốc trong Haskell, có thể lấy được các hàm cho các loại tùy ý hoặc chúng tôi bị hạn chế đối với các chức năng cụ thể không?Phát sinh các chức năng tùy ý trong Haskell
Trả lời
Bạn có thể lấy trường hợp của các lớp sau trong haskell 98: Eq, Ord, Enum, Ix, Bounded, Read và Show.
Sử dụng tiện ích mở rộng ghc, bạn cũng có thể lấy được các trường hợp của các lớp sau: Có thể đánh máy, Dữ liệu, Functor, Có thể gập lại và truyền tải. Ngoài ra còn có một phần mở rộng ghc cho phép một newtype lấy được các thể hiện từ kiểu triển khai của nó.
Bạn không thể tìm thấy trường hợp các lớp tùy ý vì lý do đơn giản mà haskell sẽ không biết cách tạo các chức năng cần thiết mà không có kiến thức đặc biệt về lớp được đề cập.
Nhưng GHC có thể xử lý một số trường hợp đơn giản. Nếu bạn nói 'newtype Bar = Bar Foo' và Foo có một cá thể Quux, thì GeneralizedNewtypeDeriving có thể lấy được cá thể Quux cho Bar cho bạn. Tất nhiên, đây chỉ là việc tháo gỡ tầm thường, nhưng nó tốt hơn là không có gì. – jrockway
Bạn bị hạn chế đối với các lớp cụ thể, về mặt trình biên dịch biết cách lấy được cho bạn. Sử dụng một bộ tiền xử lý, hoặc mẫu Haskell, bạn có thể tự mình mã hóa các cơ chế truy xuất mới, nếu bạn biết các cách tiếp cận chung để sinh năng thực hiện các hàm cho các kiểu cụ thể.
Hai câu trả lời còn lại là chính xác. Nhưng nếu bạn cần nhiều hơn, có một số gói về hackage có thể xử lý nhiều hơn. Tôi thích Data.Derive rất nhiều, vì bạn có thể tạo mã nguồn trực tiếp (để tương thích) hoặc móc nó vào Mẫu Haskell để làm điều đó tại thời gian biên dịch. Một loạt các lớp học đã được hỗ trợ và rất dễ dàng để thêm hỗ trợ cho riêng bạn. Tóm tắt: sân quảng cáo cho một thư viện chết tiệt tốt :-)
Bây giờ tôi lấy lại cái này. Lúc đó tôi không cố gắng thêm hỗ trợ cho riêng mình, nhưng tôi cho rằng nó rất dễ. Nó không phải là; nó liên quan đến việc biên dịch lại thư viện từ những gì tôi có thể nói. Nhưng vẫn còn hỗ trợ được xây dựng trong là tốt đẹp và đầy đủ. – luqui
Để thêm vào câu trả lời của Don: bắt nguồn chức năng tùy chỉnh cho kiểu dữ liệu được gọi là generic programming và có một lot of literature về việc này. Preprocessor và Template Haskell không phải là giải pháp duy nhất; xem một trong những bài báo tổng quan mà danh sách các tài liệu cho các tùy chọn khác.
- 1. Chức năng trong Haskell
- 2. Haskell Monad Chức năng
- 3. Ứng dụng Chức năng Haskell
- 4. chức năng bên ngoài trong haskell?
- 5. Nút kết nối với chức năng tùy ý
- 6. Phát hiện các hình dạng tùy ý
- 7. Chức năng đa biến trong Haskell
- 8. Các khóa JSON tùy ý với Aeson - Haskell
- 9. Kiểm tra nội bộ của các chức năng trong Haskell
- 10. Hiển thị các loại chức năng trong Haskell
- 11. Chức năng tương tác Haskell
- 12. Truyền chức năng qua mạng trong Haskell
- 13. loại Hiện sinh trong chức năng bậc cao
- 14. Có chức năng haskell cho các ngày không?
- 15. chức năng đa hình về hiện sinh loại
- 16. Haskell/Miranda: Tìm loại chức năng
- 17. Haskell - Trợ giúp lập trình chức năng
- 18. Haskell newtype, nhưng giữ chức năng cũ
- 19. Ứng dụng chức năng Haskell và currying
- 20. Dòng in Haskell có chức năng
- 21. Chức năng đa biến Haskell Với IO
- 22. Các chức năng của máy phát điện trong R
- 23. Các "xử lý" chức năng và Real World Haskell
- 24. Cặp Haskell và chức năng bỏ ghép
- 25. Chức năng Haskell từ trái sang phải
- 26. Chức năng Haskell không chấm dứt
- 27. Làm bất kỳ ngôn ngữ hiện có nào có cho phép các đối số chức năng ở các vị trí tùy ý trong tên chức năng không?
- 28. dữ liệu đường ống thông qua chức năng tùy ý trong Clojure
- 29. Các gợi ý về chức năng Vim cho C
- 30. Haskell chức năng thành phần câu hỏi
Hehe, +1 nếu bạn tìm thấy điều này bởi vì bạn đang hy vọng bạn có thể lấy được 'Test.QuickCheck.Arbitrary' cho ADT. :) –