Tôi đang nghiên cứu các hệ thống loại thuần túy, đặc biệt là tính toán các công trình, và cố gắng sử dụng mã hóa cho các loại đệ quy trên nó, theo Philip Wadler, là có thể . Ví dụ, tôi đang sử dụng thư viện Morte Haskell để mã hóa các số Scott như được đưa ra bởi Cardelli .
Một bản tóm tắt về mã hóa là như vậy: được đưa ra một loại đệ quy (dương) ...
... chúng tôi có thể mã hóa nó thành một loại trên Hệ thống F là ...
... hoặc, sử dụng ký hiệu của hệ thống loại thuần túy (với F rõ ràng ) ...
... vì là một hàm tạo kiểu ( là kiểu các loại).
Để mã hóa như vậy, chúng ta cần khai báo ba hàm, , và , theo Wadler, và được Cardelli sử dụng trên mã hóa cho các số Scott.
gấp: Tất cả X. (FX -> X) -> T -> X
gấp = \ X. \ k: FX -> X. \ t: T. t X k
trong: FT -> T
trong = \ s: F T. \ X. \ k: FX -> X. k (F (gấp X k) s).
(Trong đó là )
Thật là tầm thường khi viết hàm như đã cho. Nhưng khi cố gắng viết chức năng, nó dường như không typecheck. Biểu thức có kiểu , và nên loại . Sau đó, chúng tôi suy ra rằng nên thuộc loại (trông giống như a ). Đây không phải là lỗi chính tả, bởi vì là một hàm tạo kiểu (thuộc loại ).fmap
F
Điều này không giống như một lỗi đánh máy ... tôi có thiếu thứ gì không?
fmap
! Tôi không có kinh nghiệm về lý thuyết thể loại, nhưng tôi thực sự thấy rằng khoảng 10 phút trước trên "Một ghi chú về các kiểu dữ liệu phân loại" (GC Wralth). Bây giờ tôi đã có thể viết đúng chức năng, làm việc như một lá bùa. Cảm ơn bạn rất nhiều, dr. Wadler! : D