Из нежное введение в Haskell, есть следующие законы монады. Может ли кто-нибудь интуитивно объяснить, что они означают?
return a >>= k = k a
m >>= return = m
xs >>= return . f = fmap f xs
m >>= (\x -> k x >>= h) = (m >>= k) >>= h
Вот мое объяснение:
-
Мы ожидаем, что возвращаемая функция обернется
a
, чтобы ее монадическая природа была тривиальной. Когда мы привязываем его к функции, нет никаких монадических эффектов, она должна просто передатьa
функции. -
Развернутый вывод m передается для возврата, который переустанавливает его. Монадическая природа остается прежней. Так что это то же самое, что и оригинальная монада.
-
Развернутое значение передается в f, затем перезаписывается. Монадическая природа остается прежней. Это поведение, ожидаемое при преобразовании нормальной функции в монадическую функцию.
-
У меня нет объяснения этого закона. Это говорит о том, что монада должна быть "почти ассоциативной", хотя