Mã hóa kiểu đệ quy trên Hệ thống F (và các hệ thống loại thuần túy khác)


8

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) ...

μX.F X

... chúng tôi có thể mã hóa nó thành một loại trên Hệ thống F là ...

Lfix X.F X = ΛX.(F XX)X

... 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 F) ...

Lfix = ΠF:.ΠX:.(F XX)X

... vì F 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, fold , inout , 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 đó TLfix X.F X )

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 ).foldin(fold X k)TX(F (fold X k) s)F XF(TX)F TF XfmapF

Đ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?

Câu trả lời:


7

Có một quy ước trong lý thuyết thể loại rằng cùng một biểu tượng được sử dụng cho một hàm tạo kiểu và hàm ánh xạ trên hàm tạo kiểu đó. Do đó, nếu f: X -> Y thì F f: FX -> F Y.


Vậy thực sự là a 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
paulotorrens
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.