Вопрос

(m >>= f) >>= g = m >>= (\x -> f x >>= g)

Что отличается от f а также \x->f x ??

Я думаю, что они одинаковы a -> m b. Анкет Но кажется, что второй >>= в правой стороне уравнения относится к типу \x->f x в качестве m bАнкет Что идет не так?

Это было полезно?

Решение

Выражения f а также \x -> f x Для большинства целей означают одно и то же. Тем не менее, объем выражения лямбда простирается как можно дальше, т.е. m >>= (\x -> (f x >>= g)).

Если типы m :: m a, f :: a -> m b, а также g :: b -> m c, затем слева у нас (m >>= f) :: m b, и справа у нас (\x -> f x >>= g) :: a -> m c.

Таким образом, разница между двумя выражениями состоит в том, какой заказ (>>=) операции выполняются, очень похожие на выражения 1 + (2 + 3) а также (1 + 2) + 3 отличается только в том порядке, в котором выполняются дополнения.

Законы Монады требуют, чтобы, как и в дополнение, ответ должен был быть одинаковым для обоих.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top