Tôi đọc trong cats documentation về typeclasses Apply
và Applicative
. Tôi tự hỏi tại sao thư viện cung cấp hai loại lớp riêng biệt thay vì chỉ một loại lớp Applicative
, có thể mở rộng Functor
và thêm ap
? Có ai sử dụng Apply
không phải là Applicative
?Tại sao chúng ta cần tách các lớp Áp dụng và Áp dụng?
8
A
Trả lời
12
Applicative
cung cấp phương thức pure
, là cách để "đăng nhập". Nếu không, mặc dù bạn có thể chuyển đổi F[A]
để F[B]
, hoặc với A => B
(thông qua map
) hoặc F[A => B]
(thông qua ap
), bạn không có khả năng đặt bất cứ điều gì bên trong một F
. Vì vậy, bạn bị giới hạn để cho phép người khác làm điều đó cho bạn.
Sự khác biệt với Applicative
là bạn có thể đặt mọi thứ vào, bắt đầu từ không có gì.
Kể từ khi một trong hai có thể hữu ích ("bạn được trao quyền để đưa mọi thứ vào một F
" và "không, giữ cho bàn tay của bạn ra, và hoạt động trên những gì bạn đang đưa ra"), Applicative
và Apply
là typeclasses riêng biệt.
Các vấn đề liên quan
- 1. Tại sao chúng ta cần sử dụng cơ số?
- 2. Tại sao ô này không được áp dụng đúng lớp?
- 3. PHP: Tại sao chúng ta cần hàm so sánh chuỗi?
- 4. Tại sao chúng ta cần strdup()?
- 5. Tại sao chúng ta cần ng-click?
- 6. mongodb tại sao chúng ta cần getSisterDB
- 7. Tại sao chúng ta cần sợi
- 8. Tại sao chúng ta cần các nhà thầu tĩnh?
- 9. Tại sao chúng ta sử dụng setLayoutParams?
- 10. Tại sao chúng ta sử dụng tf.name_scope()
- 11. Tại sao chúng ta cần Control.Lens.Reified?
- 12. Tại sao chúng ta sử dụng Response.ClearHeaders()?
- 13. Tại sao chúng ta cần các Dịch vụ Web RESTful?
- 14. Tại sao tôi nên sử dụng 'áp dụng' trong Clojure?
- 15. Chúng ta có cần áp dụng Giao dịch Sql ở cả mã C# và Thủ tục lưu sẵn không?
- 16. Tại sao Java 8 áp dụng các chú thích khác với các lớp dẫn xuất?
- 17. Tại sao chúng ta sử dụng động Proxy
- 18. HTML và CSS có cần hợp lệ trước khi chúng tôi áp dụng JavaScript không?
- 19. Ví dụ khi chúng ta nên sử dụng chạy, hãy, áp dụng, cũng với trên Kotlin
- 20. MVC: tại sao chúng ta cần "điều khiển", hoặc khi nào chúng ta nên sử dụng mẫu này?
- 21. Tại sao chúng ta tách các hành động và bộ giảm trong cấu trúc Flux/Redux?
- 22. Tại sao chúng ta cần "var self = this" trong các lớp trong Javascript?
- 23. Tại sao chúng ta sử dụng @Embeddable In Hibernate
- 24. Tại sao hàm được áp dụng một phần trì hoãn việc khởi tạo lớp trong Scala?
- 25. Tại sao chúng ta cần JWT khi chúng ta có phiên khách hàng?
- 26. Tại sao chúng ta cần Anaconda khi chúng ta có pip?
- 27. Tại sao chúng ta cần ssh không mật khẩu Hadoop?
- 28. Tại sao chúng ta cần toán tử === đặc biệt này?
- 29. flexbox vs bảng, tại sao chúng ta cần flexbox?
- 30. Khi nào và tại sao chúng ta nên sử dụng lớp System.ComponentModel.Container?
Cảm ơn bạn. Tôi nghĩ rằng tôi đã nhận nó. Bạn có thể đưa ra một ví dụ về việc sử dụng 'Áp dụng' không phải là' Áp dụng' (như trong "giữ tay bạn, và vận hành trên những gì bạn đang đưa ra")? – Michael
Bạn có thể tưởng tượng tất cả các loại vụ án. Ví dụ: nếu bạn có loại lỗi mà bạn muốn xử lý nhưng bạn không muốn nó có thể tạo bất kỳ lỗi mới nào hoặc sử dụng bất kỳ thông tin nào không phải từ ngữ cảnh lỗi, bạn có thể muốn loại lỗi của mình có một 'Apply' typeclass nhưng không phải là một' Applicative'. –