Lợi thế của các mũi tên trên các hàm thường xuyên trong haskell là gì. Những gì họ có thể làm các chức năng không thể. Các hàm có thể ánh xạ trên các cấu trúc bằng cách sử dụng fmap.Lợi thế của các mũi tên trên các hàm
Trả lời
Trên hình ảnh rộng hơn, các mũi tên đưa bạn ra khỏi Hask và vào các danh mục khác cần khám phá. Danh mục Kleisli có lẽ là người quen thuộc nhất với Haskellers, theo sau là Cokleisli. Đó là những "phần mở rộng" tự nhiên của Hask: thêm một endofunctor xung quanh hoặc là kết quả hay cãi nhau, sau đó bạn sẽ có được một loại một lần nữa nếu
Kleisli
: các functor là một đơn nguyên, vì vậyid ≅ return :: a -> m a
(.) ≅ (<=<) :: (b->m c) -> (a->m b) -> a->m c
CoKleisli
: các functor là một comonad, vì vậyid ≅ coreturn :: m a -> a
và(.) :: (m b->c) -> (m a->b) -> m a->c
(Vì bạn không cần Arrow
, chỉ Category
. Nhưng loại nói chung không phải là rất thú vị, bạn thường muốn monoidal hoặc thậm chí Descartes đóng loại, đó là những gì Arrow
được khoảng hướng tới.)
Nhưng có chắc chắn được rất nhiều other categories.Hầu hết không có nhiều việc phải làm với Hask và không thể được thể hiện với lớp tiêu chuẩn Arrow
, chủ yếu là do các đối tượng có đặc tính đặc biệt mà không phải mọi loại Haskell đều đáp ứng. Trên thực tế, nếu bạn thêm khả năng hạn chế các loại đối tượng, the possibilities immediately become much wider. Nhưng ngay cả khi bạn ở lại với các lớp tiêu chuẩn, có lẽ chỉ đơn giản là trong ->
, phong cách thành phần không có điểm tự nhiên với các mũi tên thường xuất hiện rất đẹp, súc tích và mở ra những cách mới để suy nghĩ về các phép biến đổi.
Chức năng chỉ là một thể hiện của các mũi tên, nó giống như yêu cầu "Tại sao nên sử dụng monads thay vì chỉ Maybe
".
Mọi thứ bạn có thể làm với các mũi tên đều có thể được thực hiện với các hàm kể từ khi cá thể Arrow (->)
chỉ có thể nói về một phần nhỏ chức năng, cụ thể là trong lớp loại Arrow
. Tuy nhiên, các mũi tên có nhiều cá thể hơn các hàm đơn giản, vì vậy chúng ta có thể sử dụng các hàm ssame để hoạt động trên các kiểu phức tạp hơn.
Mũi tên đẹp vì chúng có thể có nhiều cấu trúc hơn chỉ là một hàm, khi duyệt ngang chỉ với fmap
, chúng tôi không có cách nào để tích lũy hiệu ứng, mang tính biểu cảm hơn so với các đơn vị! Xem xét mũi tên Kleisli,
newtype Kleisli m a b = Kleisli {runKleisli :: a -> m b}
Điều này tạo thành mũi tên khi m
là một đơn nguyên. Vì vậy, mỗi Monad
tạo thành một mũi tên và do đó chúng tôi có thể xây dựng tính toán đơn thuần bằng cách liên tục sáng tác a -> m b
và thực hiện tất cả những thứ hữu ích như thế này. Một số thư viện XML sử dụng các mũi tên để trừu tượng hóa các hàm từ một phần tử tới các phần tử con của nó và sử dụng nó để duyệt qua tài liệu. Các trình phân tích cú pháp khác sử dụng các mũi tên (mục đích ban đầu của chúng) mặc dù ngày nay điều này dường như không có lợi cho Applicative
. Điểm mà bạn hy vọng nhận thấy là các mũi tên chung chung hơn, khi chúng ta chỉ nói về mũi tên, chúng ta tránh sao chép tất cả mã mà chúng ta cần viết để làm điều gì đó với các trình phân tích cú pháp, trình gỡ xml và monadic của chúng ta chức năng!
Nó cũng giống như chọn cho Monad
qua Maybe
, chúng tôi mất một số quyền lực vì chúng tôi không còn có thể đưa ra các tuyên bố cụ thể nữa, nhưng chúng tôi nhận được mã chung chung hơn.
- 1. Hàm jQuery .each() với các hàm mũi tên ES6
- 2. Cắt các phím mũi tên
- 3. HorizontalScrollView với các mũi tên
- 4. Có lợi thế nào khi sử dụng các khối trên các hàm trong Objective-C?
- 5. IOS tắt các mũi tên trên tab bàn phím
- 6. Curses nhận các phím mũi tên
- 7. Các hàm mũi tên hòa hợp es6 trong các trình xử lý nhanh
- 8. Cách tính tọa độ của đầu mũi tên dựa trên mũi tên?
- 9. Vẽ các mũi tên với gnuplot
- 10. Scroll div với các phím mũi tên
- 11. Ví dụ về các Mũi tên đang hoạt động tốt?
- 12. Giải thích về các mũi tên UML
- 13. Sử dụng sáng tạo các mũi tên
- 14. Lấy các phím mũi tên từ cin
- 15. Chân đế xoăn trong các chức năng mũi tên
- 16. Lợi thế của RxJava2 trên AsyncTask
- 17. Cú pháp hàm mũi tên trong các thành phần không trạng thái phản ứng
- 18. này giá trị cho các chức năng mũi tên
- 19. Java - có các nút hiển thị mũi tên
- 20. Tạo các mũi tên vector có lập trình trong KML
- 21. Mũi tên Cú pháp hàm không hoạt động với webpack?
- 22. Danh sách sắp xếpXem các cột có mũi tên
- 23. Lợi thế của RESTEasy trên Apache CXF?
- 24. những lợi thế của MVC3 trên MVC2
- 25. Chức năng mũi tên ES6 với các dấu ngoặc đơn
- 26. Vẽ các đường cong đầu mũi tên trong HTML5 Canvas
- 27. Cách nắm bắt các phím mũi tên trong node.js
- 28. ECMAScript6 mũi tên hàm trả về một đối tượng
- 29. hàm setInterval mà không mũi tên chức năng
- 30. Lợi thế và bất lợi của CardView