Luật Naturality cho Traversables có nghĩa là gì?


8

Luật Naturality quy định rằng:

t . traverse f == traverse (t . f) -- for every applicative transformer t

Bây giờ đối với RHS của luật, nếu f có loại Applicative a => x -> a y, thì t phải là loại (Applicative a, Applicative b) => a y -> b y, do thành phần chức năng.

Đối với LHS, traverse f có loại (Applicative a, Traversable c) => c x -> a (c y). Nhưng vì traverse f được cấu tạo với t. traverse f, t phải thuộc loại (cx -> a (cy)) -> b y.

Bây giờ, đối với LHS, t có loại a (cy) -> bởi, nhưng từ RHS, nó có loại ay -> b y. Làm thế nào là âm thanh pháp luật từ một quan điểm loại?

Chỉnh sửa: Đã sửa lỗi loại t trong LHS


Đã sửa lỗi loại t trong khấu trừ LHS. Vẫn không chắc chắn làm thế nào pháp luật sau.
dùng4132

Câu trả lời:


6

Tôi nghĩ rằng những gì bạn đã bỏ lỡ là tđược cho là một sự biến đổi tự nhiên (cũng có thể phải có một số tính chất bảo tồn cấu trúc). Biến đổi tự nhiên được định lượng, như vậy:

t :: forall z. a z -> b z   -- "t is an N.T. from a ~> b"

Ở bên phải, chúng tôi khởi tạo nó tại y, để có được t :: a y -> b y; ở bên trái, chúng tôi khởi tạo nó tại c yđể có được a (c y) -> b (c y). Cách tôi nghĩ về nó là một sự biến đổi tự nhiên làm thay đổi lớp bên ngoài, bất kể bên trong là gì. Luật tự nhiên luôn nói về mối quan hệ giữa các cách khác nhau một cái gì đó được khởi tạo.

t                :: forall z. a z -> b z

f                :: x -> a y
t                :: a y -> b y           -- instantiated at y
t . f            :: x -> b y
traverse (t . f) :: c x -> b (c y)

traverse f       :: c x -> a (c y)
t                :: a (c y) -> b (c y)   -- instantiated at (c y)
t . traverse f   :: c x -> b (c y)
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.