[Haskell] Russian translate for monad/index.md (#20865)
This commit is contained in:
committed by
Gregory Gubarev
parent
6c6bcb04fc
commit
94f603807f
@ -2,11 +2,46 @@
|
||||
title: Monad
|
||||
localeTitle: монада
|
||||
---
|
||||
# Законы Монады
|
||||
# Законы Монад
|
||||
|
||||
Существует 3 закона, которые должны удовлетворяться типом данных, который должен рассматриваться как монада
|
||||
Существует 3 правила, которые ещё называются законами, которым должны удовлетворять те типы данных, которые хотят быть монадами (на самом деле, это не совсем так, мы можем создать тип, который будет в хаскеле монадой, но не соответствовать законом. Это не запрещено, но очень не приветствуется)
|
||||
|
||||
# Возможно, Монада
|
||||
## Левая единица (Left Identity)
|
||||
`return a >>= f` = `f a`
|
||||
|
||||
Здесь говорится о том, что если мы берём значение и возвращаем его в контексте (заключаем его в монаду),
|
||||
а затем используем `>>=` для передачи его в функцию, то эта операция - то же самое, что и
|
||||
прменение этой функции к исходному значению.
|
||||
|
||||
## Правая единица (Right Identity)
|
||||
`m >>= return` = `m`
|
||||
|
||||
А тут говорится о том, что когда мы используем `>>=` для передачи монадического (заключённого) значения
|
||||
в функцию `return`, мы получаем изначальное монадическое (заключённое) значение.
|
||||
|
||||
## Ассоциативность (Associativity)
|
||||
`(m >>= f) >>= g` = `m >>= (\x -> f x >>= g)`
|
||||
|
||||
Этот закон позволяет нам связывать вызовы монадических функций не смотря на их вложенность.
|
||||
|
||||
Это может показаться очевидным, и Вы можете подумать, что так и должно быть,
|
||||
но на самом деле ассоциативность обязательна для такого поведения.
|
||||
|
||||
# Так что на счёт `>>=` и `return`?
|
||||
Всё просто:
|
||||
|
||||
`>>=`, или 'bind' берёт монаду и функцию, которая принимает на вход чистое значение
|
||||
и возвращает монаду, после этого применяет эту функцию к монаде. Это позволяет нам
|
||||
работать с данными внутри монады, которые не могут быть по-другому доступы другим,
|
||||
немонадическим функциям.
|
||||
|
||||
`return`, с другой стороны, берёт некое значение и возвращает монаду, содержащую
|
||||
это значение. Наверное, всё, что вы хотели бы знать про `return`, её тип:
|
||||
```haskell
|
||||
return :: a -> m a
|
||||
```
|
||||
|
||||
# Монада Maybe
|
||||
|
||||
```haskell
|
||||
justHead :: Maybe Char
|
||||
@ -15,9 +50,9 @@ justHead :: Maybe Char
|
||||
return x
|
||||
```
|
||||
|
||||
# Список Монад
|
||||
# Монада List
|
||||
|
||||
возврат такой же, как чистый аппликативный
|
||||
возвращает тоже самое значение, что и функция `pure` для класса типов `Applicative`
|
||||
|
||||
экземпляр Monad \[\], где
|
||||
return x = \[x\]
|
||||
|
Reference in New Issue
Block a user