2015-07-22 17 views
15

Thực tế là (>>=) có thể được triển khai bằng cách sử dụng fmapjoin trong khi join có thể được triển khai bằng cách sử dụng >>=. Có lý do nào chúng tôi không xác định lớp học Monad với số join được bao gồm và sử dụng các định nghĩa mặc định sau không?Tại sao không phải là `tham gia` một phần của lớp` Monad`

join x = x >>= id 
x >>= f = join $ f <$> x 

này sẽ cho phép một định nghĩa tối thiểu để bao gồm một trong hai chỉ (>>=) hoặc join, thay vì buộc (>>=). Có thể là một chút hữu ích xem xét lý thuyết thể loại có xu hướng ưu tiên join.

Đối số bình thường chống lại các lớp sửa đổi là chúng tôi phá vỡ tính tương thích ngược. Tuy nhiên, trong trường hợp này, điều đó sẽ không xảy ra - chúng tôi chỉ thêm khả năng xác định Monad sử dụng join.

+1

Như bạn nói, '(>> =) = tham gia. fmap', nhưng trước khi GHC 7.10 'Monad' là * không * tự động là một functor. Theo nghĩa đó, chúng ta định nghĩa cả 'join' và' fmap' trong 'bind'. Đôi khi cũng dễ thực hiện hơn '>> =' hơn là tham gia. Hãy thử làm điều đó cho, ví dụ, trình phân tích cú pháp/tiểu bang. – AJFarmar

+0

@AJFarmar Tôi không nghĩ rằng '(>> =) = tham gia. fmap' hoạt động. Các đối số được lật và có một số vấn đề khác. Nhưng điểm tốt! – Alec

+0

Ah, bạn nói đúng, nó thực sự là '(tham gia.). lật fmap', nhưng ý tưởng đã ở đó, như bạn nói. – AJFarmar

Trả lời

21

Điều đó có nghĩa là xảy ra với Applicative-Monad proposal (đã được chuyển sang GHC 7.10). Tuy nhiên, có a technical issue liên quan đến type roles trong GHC đã trì hoãn vô thời hạn việc triển khai những gì bạn đề xuất.

+6

Và đó là lý do khủng khiếp để loại trừ 'tham gia'. Nó phải là một phần của lớp Monad. – augustss

+4

@augustss, đó là lý do * buồn *, không phải là * xấu *. Việc có thể sử dụng sự thừa hưởng và loại bỏ mới của generaltype cho monads là một điều tốt. – dfeuer

+1

@dfeuer Nó giống như bạn nói, nhưng người ta chỉ có thể xác định 'tham gia' một cách độc lập và sau đó sử dụng danh tính' (>> =) = (tham gia.). lật fmap' như tôi đã chỉ ra ở trên, vì vậy nó không phải là một vấn đề. – AJFarmar

Các vấn đề liên quan