История изменений
Исправление 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
Так себе контейнер. Есть и более интересные типы, которые имеют такие инстансы, но тоже не особо хранят какие-то значения.