loại đa hình là một phần mở rộng cho hệ thống kiểu Haskell, supported bởi UHC, cho phépSử dụng các loại đa hình là gì?
data A x y = A (y x)
được gõ (kinded?) Như a -> (a -> *) -> *
. Chúng hữu ích gì?
loại đa hình là một phần mở rộng cho hệ thống kiểu Haskell, supported bởi UHC, cho phépSử dụng các loại đa hình là gì?
data A x y = A (y x)
được gõ (kinded?) Như a -> (a -> *) -> *
. Chúng hữu ích gì?
Ví dụ sử dụng có thể có thể sử dụng số TypeCompose của conal để tạo các máy biến áp đơn nguyên theo kiểu không có điểm.
type MyT = StateT Foo :. MaybeT :. ContT Bar
(chỉ là một ví dụ, tôi không có ý tưởng những gì người ta sẽ làm gì với những foos và quán bar ..)
Thay vì:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(điều này sẽ có cùng kết quả ngoài newtype
-wrappers)
Hiện tại, bạn cần sao chép mã bộ phối hợp cho các loại khác nhau và tiện ích mở rộng này sẽ xóa bỏ sự lặp lại và cho phép sử dụng một đoạn mã để thống trị tất cả.
Chúng rất hữu ích cho việc xác định các hàm hoạt động trên các nhà xây dựng dữ liệu với tính chất tùy ý, tất nhiên!
Ví dụ cụ thể có thể là một hàm, được cung cấp cho một hàm tạo dữ liệu có tính chất tùy ý, trả về một hàm tạo dữ liệu mới bao bọc hàm tạo đã có trong Some().
Adding Polymorphic Kinds to GHC
Các nền cho câu hỏi này sẽ là motivation in general for a more expressive kind system.
Đó là lý do tổng thể để thêm các loại đa hình vào Haskell là cải thiện trải nghiệm của lập trình cấp loại. Hiện tại, mức lập trình loại ở Haskell được tiến hành ở mức "kind" về cơ bản chưa được phân loại. Một ngôn ngữ loại phong phú hơn sẽ làm cho lập trình cấp loại trong Haskell, nói chung, dễ dàng hơn.
Một ví dụ cụ thể hơn sẽ là để loại bỏ các (động) hạn chế Typeable từ Generics của phong cách SYB (citation), cũng như cải thiện hỗ trợ tổng thể cho lập trình generic-kinded cao ..
Bạn có thể cho một ví dụ ? – solidsnack