История изменений
Исправление
hateyoufeel,
(текущая версия)
:
Вот до сегодняшнего дня я её так и воспринимал. return = упаковать, >>= = вытащить, обработать и упаковать. Для контейнеров, для которых может не быть понятия «распаковать» (как IO).
Нуууу… всё, конечно, так, но не совсем. Например, Proxy из Data.Proxy – имеет instance Monad, но он ничего не хранит, потому что
data Proxy a = Proxy
instance Functor Proxy where
fmap f Proxy = Proxy
instance Applicative Proxy where
Proxy <*> Proxy = Proxy
pure _ = Proxy
instance Monad Proxy where
Proxy >>= f = Proxy
Так себе контейнер. Есть и более интересные типы, которые имеют такие инстансы, но тоже не особо хранят какие-то значения.
Исходная версия
hateyoufeel,
:
Вот до сегодняшнего дня я её так и воспринимал. return = упаковать, >>= = вытащить, обработать и упаковать. Для контейнеров, для которых может не быть понятия «распаковать» (как IO).
Нуууу… всё, конечно, так, но не совсем. Например, Proxy из Data.Proxy – имеет instance Monad, но он ничего не хранит, потому что
data Proxy a = Proxy
instance Functor Proxy where
fmap f Proxy = Proxy
instance Applicative Proxy
Proxy <*> Proxy = Proxy
pure _ = Proxy
instance Monad Proxy where
Proxy >>= f = Proxy
Так себе контейнер. Есть и более интересные типы, которые имеют такие инстансы, но тоже не особо хранят какие-то значения.