Đối với xa như tôi hiểu, một functor là một ánh xạ giữa hai loại, ví dụ từ các đối tượng trong C http://mathurl.com/32qch9w.png đến các đối tượng trong D http://mathurl.com/36b8r37.png trong đó C http://mathurl.com/32qch9w.png và D http://mathurl.com/36b8r37.png là các danh mục.Làm thế nào các functors trong Haskell liên quan đến functors trong lý thuyết thể loại?
Trong Haskell có Hask trong đó đối tượng là loại Haskell và hình thái là hàm Haskell. Tuy nhiên, kiểu lớp Functor
có chức năng fmap
mà bản đồ giữa các loại (mà là do các đối tượng và không loại tự):
fmap :: (a -> b) -> f a -> f b
f a
và f b
đều các đối tượng trong Hask. Điều này có nghĩa là mọi trường hợp của Functor
trong Haskell là một endofunctor, và nếu không thì Functor
thực sự đại diện cho một functor?
Tôi thiếu gì ở đây? Các loại cũng có trong Haskell không?
Bạn nói * mũi tên của Hask tương thích với ánh xạ đối tượng 'F' *. Đó có phải là một tiểu thể loại của Hask? –
@Zoidberg Yup, đó là danh mục con của Hask có đối tượng là các kiểu có hàm tạo ngoài cùng là 'F'. –
Tôi hiểu điều này một cách chính xác: về mặt lý thuyết các endofunctors không nhất thiết phải làm việc trên các loại với loại '* -> *', tôi có nghĩa là functor có thể ánh xạ một hàm 'Int -> Char' để hoạt động' String -> Double'. Theo tôi hiểu, trong lý thuyết các giảng viên làm việc trên bất kỳ hình thái nào. Nhưng tôi đoán đó không phải là quá thực tế. Hay tôi hoàn toàn sai ở đây? – dimsuz