История изменений
Исправление qnikst, (текущая версия) :
Ссылку, не дам. Монада это такой тайпкласс, который приносит одну операцию - bind:
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
Как ты видишь из типа, для того, чтобы выполнить действие a -> m b
нам необходим результат из a
, поэтому чтобы ты не делал выполнял сразу или строил какой план или ещё что, первое действие выполнится до творого. Так везде в IO, ST, Reader, Maybe, ну разве кроме MyBrokenMonad:
instance Monad MyBrokenMonad where _ >>= f = f undefined
В этом отличие от Applicative, в котором нету связи, соответвенно порядка нет, и можно вычислять как угодно с точностью до сохранения семантики.
Не стоит забывать, что мы говорим о вычислительном контексте, который задают структуры данных такие как Maybe, Reader или (->), IO:
- Reader - вычисление окружением
- Maybe - вычисление с возможным значением
- List - вычисление с множественным количеством значений
- IO - вычисление с произвольными эффектами
В любом из этих контекстов монадическая структура задает порядок.
Исходная версия qnikst, :
Ссылку, не дам. Монада это такой тайпкласс, который приносит одну операцию - bind:
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
Как ты видишь из типа, для того, чтобы выполнить действие a -> m b
нам необходим результат из a
, поэтому чтобы ты не делал выполнял сразу или строил какой план или ещё что, первое действие выполнится до творого. Так везде в IO, ST, Reader, Maybe, ну разве кроме MyBrokenMonad:
instance MyBrokenMonad m where _ >>= f = f undefined
В этом отличие от Applicative, в котором нету связи, соответвенно порядка нет, и можно вычислять как угодно с точностью до сохранения семантики.
Не стоит забывать, что мы говорим о вычислительном контексте, который задают структуры данных такие как Maybe, Reader или (->), IO:
- Reader - вычисление окружением
- Maybe - вычисление с возможным значением
- List - вычисление с множественным количеством значений
- IO - вычисление с произвольными эффектами
В любом из этих контекстов монадическая структура задает порядок.