Theo dõi Ví dụ về Monad là gì thay thế nhưng không phải là MonadPlus? :
Giả sử là một đơn nguyên. Các mối quan hệ betweem là một Thay thế , MonadPlusCatch và MonadPlusDistr là gì? Đối với mỗi sáu cặp có thể, tôi muốn có một bằng chứng cho thấy một cặp ngụ ý khác hoặc một ví dụ ngược lại rằng nó không có.
(Tôi đang sử dụng
MonadPlusCatch để phân biệt MonadPlus đáp ứng quy tắc Bắt trái :
mplus (return a) b = return a
MonadPlusDistr để phân biệt MonadPlus làm bão hòa quy tắc Phân phối trái :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
xem MonadPlus trên HaskellWiki .)
Kiến thức hiện tại + trực giác của tôi là:
- MonadPlusDist Alternative -
có thểđúng -có vẻ đơn giản, tôi tin rằng tôi đã phác thảo bằng chứng, tôi sẽ kiểm tra và nếu đúng, tôi sẽ đăng nóAndrewC đã trả lời phần này. - Thay thế MonadPlusDist - sai - như AndrewC đã thể hiện trong câu trả lời của mình : là một Thay thế , nhưng được biết đó không phải là MonadPlusDist (đó là MonadPlusCatch ).
Maybe
MonadPlusCatch Alternative -
có thểsai - Tôi tin rằng (hoặc về cơ bản là bất cứ thứ gì ) sẽ đóng vai trò là một ví dụ mẫu. Lý do làMaybeT (Either e)
MaybeT m'
((pure x) <|> g) <*> a = -- LeftCatch (pure x) <*> a -- which in general cannot be equal to ((pure x) <*> a) <|> (g <*> a)
một lần nữa tôi sẽ kiểm tra và đăng bài. (Điều thú vị là chỉ
Maybe
nó chứng minh, bởi vì chúng ta có thể phân tích nếua
làJust something
hayNothing
-. Xem câu trả lời nói trên AndrewC của)- Thay thế MonadPlusCatch -
có thểsai - nếu chúng tôi chứng minh rằng MonadPlusDist Alternative thì sẽ phục vụ như một ví dụ ngược lại. (Hoặc chúng tôi có thể chứng minh rõ ràng các luật thay thế cho .)[]
[]
- MonadPlusDist MonadPlusCatch - sai - là một ví dụ phản biện đã biết.
[]
- MonadPlusCatch MonadPlusDist - sai - là một ví dụ phản biện đã biết.
Maybe
f <$>
không thực hiện bất kỳ hành động thành ngữ nào, đó là thuần túy, do đó có thể bằng cách nào đó "chuyển đổi các bên".