According to the Haskell wikibook, một Monad
gọi m
là một Functor
với hai hoạt động bổ sung:Nó không phải là một đơn nguyên, nhưng nó là gì?
unit :: a -> m a
join :: m (m a) -> m a
Đó là tốt đẹp, nhưng tôi có một cái gì đó hơi khác nhau. Lướt qua các chi tiết đẫm máu, tôi có một loại có các hàm unit
và join
tốt, nhưng fmap
không hoạt động tốt (fmap g . fmap f
không nhất thiết phải là fmap (g.f)
). Bởi vì điều này, nó không thể được thực hiện một thể hiện của Monad
. Tuy nhiên, tôi muốn cung cấp cho nó nhiều chức năng chung nhất có thể.
Vì vậy, câu hỏi của tôi là, cấu trúc lý thuyết danh mục nào tương tự như monads ở chỗ chúng có unit
và join
?
Tôi nhận thấy rằng ở một mức độ nào đó, câu hỏi trên không được xác định rõ ràng. Đối với monads, các định nghĩa unit
và join
chỉ có ý nghĩa về định nghĩa fmap
. Nếu không có fmap
, bạn không thể xác định bất kỳ luật đơn nguyên nào, do đó, bất kỳ định nghĩa nào của unit
/join
sẽ không có giá trị "hợp lệ". Vì vậy, tôi đang tìm các chức năng khác ngoài fmap
rằng có thể có ý nghĩa để xác định một số luật "không đơn điệu" trên các hàm unit
và join
này.
bạn có thể miêu tả thêm về cấu trúc mà bạn có, và những gì trong những nguyên nhân đặc biệt nó thất bại của pháp luật về hợp nhất cho 'fmap'? – luqui
Tôi cho rằng bạn đã "tinh chỉnh" 'fmap' theo cách để' join' hoàn thành luật thứ hai? Thông thường, bạn hầu như luôn nhận được 'fmap g. fmap f ≡ fmap $ f.g' chỉ tự động. – leftaroundabout
@luqui Tôi quan tâm đến tổng quát hơn là trường hợp cụ thể này, nhưng đó là phân phối bình thường. Nếu bạn nghĩ về 'fmap' khi áp dụng một hàm cho mọi điểm trong một phân phối, thì' fmap' chỉ tuân theo luật 'Functor' để bổ sung và nhân. 'đơn vị' được đào tạo trên một điểm dữ liệu duy nhất, và' nối' là kết hợp một "phân phối bình thường của các bản phân phối bình thường" thành một phân bố chuẩn duy nhất. Rõ ràng, điều này đòi hỏi một số ràng buộc về các tham số, do đó, nó không thể được thực hiện ở tất cả bằng cách sử dụng các lớp 'Base' loại và tôi đang sử dụng' ConstraintKinds' để chơi xung quanh với nó. –