LINUX.ORG.RU

История изменений

Исправление 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

Так себе контейнер. Есть и более интересные типы, которые имеют такие инстансы, но тоже не особо хранят какие-то значения.