Nhiều quan điểm khác nhau, đây là của tôi:
Chúng ta có thể nghĩ về tất cả map
chức năng/phương pháp như trường hợp cụ thể của Haskell của fmap
của Functors. Từ định nghĩa đó, chúng ta có thể giả định rằng cấu trúc sẽ được giữ nguyên (cộng với một số thuộc tính thú vị khác). Tuy nhiên, trong .NET không có Typeclasses để chúng ta có thể định nghĩa map
đối với 'Functors bị giới hạn', hậu quả là một số thuộc tính Functor sẽ không được giữ nguyên, nhưng vì không có mã chung sẽ bị ảnh hưởng nên tác động bị giới hạn.
Vì vậy, không có gì ngăn chúng tôi để xác định map
qua:
- Sets (hạn chế: các chức năng phải là 'a ->' b khi 'a và' b: so sánh và nên injective)
- Strings (hạn chế: các chức năng nên được char-> char)
- Nullables (hạn chế: các chức năng nên được 'a ->' b nơi 'b không phải là một loại tài liệu tham khảo)
Lưu ý rằng trong s các trường hợp có các hạn chế ở cả hai loại và mức giá trị, ví dụ để đặt giới hạn ở mức loại là cả hai loại 'a và' b nên có so sánh trong khi giới hạn trên giá trị hàm là hàm phải là injective.
Nếu ngôn ngữ có thể thể hiện ràng buộc mức loại, trình biên dịch sẽ phát ra lỗi khi các yêu cầu này không được đáp ứng.
Đối với các giá trị hàm không có giới hạn biên dịch mặc dù chúng tôi có thể tạo các kiểm tra đơn vị nếu chúng tôi muốn đảm bảo chúng đúng. Nhưng điều gì sẽ xảy ra nếu chúng ta không quan tâm đến việc hạn chế các chức năng đó?
Vâng, miễn là chúng tôi hiểu rằng một số thuộc tính Functor sẽ không được tuân thủ thì không có gì sai khi sử dụng bản đồ trên một số bị giới hạn Functor.
Vì vậy, chúng tôi có thể xác định map
trên các cấu trúc như danh sách được sắp xếp, tất nhiên chúng tôi không thể giả định rằng map a >> map b
sẽ luôn luôn tương đương với map (a >> b)
trong những trường hợp này. Hạn chế ở đây là hàm phải là monotonically increasing.
LƯU Ý: Đối với Haskell có một package với một functor hạn chế và một thể hiện cho Bộ
Tất cả các câu trả lời đều thực sự hữu ích, nhưng tôi nghĩ câu trả lời này là rõ ràng nhất. Tôi chắc chắn bị nhầm lẫn bằng cách cân bằng các hàm bản đồ F # với bản đồ fasktor của Haskell. – Akash