![](https://habrastorage.org/storage2/455/886/8ce/4558868cef65f4b28e06fb33e8dea6e1.png)
И мы знаем, как к нему можно применить функцию:
![](https://habrastorage.org/storage2/56c/b1d/fcf/56cb1dfcfe93c695abe91f967efa46b4.png)
Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:
![](https://habrastorage.org/storage2/3c0/4cc/19b/3c04cc19b198537e5334459b79d915c1.png)
Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных
Maybe
определяет два связанных контекста:![](https://habrastorage.org/storage2/be0/182/2de/be01822de6f660845c952b2b4fa7edb6.png)
data Maybe a = Nothing | Just a
Позже мы увидим разницу в поведении функции для
Just a
против Nothing
. Но сначала поговорим о функторах!