Spec-Zone.ru › Haskell 8

Control.Monad

Авторские права (c) Университет Глазго 2001
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддержка libraries@haskell.org
Устойчивость предварительная
Переносимость переносимый
Безопасный Haskell Надёжный
Язык Haskell2010

Содержание

  • Классы Functor и monad
  • Функции
    • Правила именования
    • Основные Monad функции
    • Обобщения функций над списками
    • Условное выполнение монадических выражений
    • Операторы подъёма монады
    • Строгие монадические функции

Описание

Классы Functor, Monad и MonadPlus, с полезными операциями над монадами.

Классы Functor и monad

class Functor f where Источник

Тип f является Functor, если он предоставляет функцию fmap, которая, учитывая любые типы a и b, позволяет применить любую функцию из (a -> b) для преобразования f a в f b, сохраняя структуру f. Кроме того, f должен соответствовать следующим условиям:

Тождество
fmap id == id
Композиция
fmap (f . g) == fmap f . fmap g

Обратите внимание, что второе правило вытекает из свободной теоремы типа fmap и первого правила, поэтому вам нужно только проверить соблюдение первого условия.

Минимальное полное определение

fmap

Методы

fmap :: (a -> b) -> f a -> f b Источник

Используя ApplicativeDo: 'fmap f as' можно понять как выражение do

do a <- as
   pure (f a)

с выведенным ограничением Functor.

(<$) :: a -> f b -> f a infixl 4 Источник

Заменяет все места в вводе одним и тем же значением. По умолчанию определение равно fmap . const, но может быть переопределено более эффективной версией.

Используя ApplicativeDo: 'a <$ bs' можно понять как выражение do

do bs
   pure a

с выведенным ограничением Functor.

Экземпляры
Подробности об экземплярах
Functor []

Since: base-2.1

Подробности об экземпляре

Определено в GHC.Base

Методы

fmap :: (a -> b) -> [a] -> [b] Источник

(<$) :: a -> [b] -> [a] Источник

Functor Maybe

Since: base-2.1

Подробности об экземпляре

Определено в GHC.Base

Методы

fmap :: (a -> b) -> Maybe a -> Maybe b Источник

(<$) :: a -> Maybe b -> Maybe a Источник

Functor IO

Since: base-2.1

Подробности об экземпляре

Определено в GHC.Base

Методы

fmap :: (a -> b) -> IO a -> IO b Источник

(<$) :: a -> IO b -> IO a Источник

Functor Par1

Since: base-4.9.0.0

Подробности об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> Par1 a -> Par1 b Источник

(<$) :: a -> Par1 b -> Par1 a Источник

Functor NonEmpty

Since: base-4.9.0.0

Подробности об экземпляре

Определено в GHC.Base

Методы

fmap :: (a -> b) -> NonEmpty a -> NonEmpty b Источник

(<$) :: a -> NonEmpty b -> NonEmpty a Источник

Functor NoIO

Since: base-4.8.0.0

Подробности об экземпляре

Определено в GHC.GHCi

Методы

fmap :: (a -> b) -> NoIO a -> NoIO b Источник

(<$) :: a -> NoIO b -> NoIO a Источник

Functor ReadP

Since: base-2.1

Подробности об экземпляре

Определено в Text.ParserCombinators.ReadP

Методы

fmap :: (a -> b) -> ReadP a -> ReadP b Источник

(<$) :: a -> ReadP b -> ReadP a Источник

Functor ReadPrec

Since: base-2.1

Подробности об экземпляре

Определено в Text.ParserCombinators.ReadPrec

Методы

fmap :: (a -> b) -> ReadPrec a -> ReadPrec b Источник

(<$) :: a -> ReadPrec b -> ReadPrec a Источник

Functor Down

Since: base-4.11.0.0

Подробности об экземпляре

Определено в Data.Ord

Методы

fmap :: (a -> b) -> Down a -> Down b Источник

(<$) :: a -> Down b -> Down a Источник

Functor Product

Since: base-4.8.0.0

Детали экземпляра

Определено в Data.Semigroup.Internal

Методы

fmap :: (a -> b) -> Product a -> Product b Исходный код

(<$) :: a -> Product b -> Product a Исходный код

Functor Sum

С момента: base-4.8.0.0

Детали экземпляра

Определено в Data.Semigroup.Internal

Методы

fmap :: (a -> b) -> Sum a -> Sum b Исходный код

(<$) :: a -> Sum b -> Sum a Исходный код

Functor Dual

С момента: base-4.8.0.0

Детали экземпляра

Определено в Data.Semigroup.Internal

Методы

fmap :: (a -> b) -> Dual a -> Dual b Исходный код

(<$) :: a -> Dual b -> Dual a Исходный код

Functor Last

С момента: base-4.8.0.0

Детали экземпляра

Определено в Data.Monoid

Методы

fmap :: (a -> b) -> Last a -> Last b Исходный код

(<$) :: a -> Last b -> Last a Исходный код

Functor First

С момента: base-4.8.0.0

Детали экземпляра

Определено в Data.Monoid

Методы

fmap :: (a -> b) -> First a -> First b Исходный код

(<$) :: a -> First b -> First a Исходный код

Functor STM

С момента: base-4.3.0.0

Детали экземпляра

Определено в GHC.Conc.Sync

Методы

fmap :: (a -> b) -> STM a -> STM b Исходный код

(<$) :: a -> STM b -> STM a Исходный код

Functor Handler

С момента: base-4.6.0.0

Детали экземпляра

Определено в Control.Exception

Методы

fmap :: (a -> b) -> Handler a -> Handler b Исходный код

(<$) :: a -> Handler b -> Handler a Исходный код

Functor Identity

С момента: base-4.8.0.0

Детали экземпляра

Определено в Data.Functor.Identity

Методы

fmap :: (a -> b) -> Identity a -> Identity b Исходный код

(<$) :: a -> Identity b -> Identity a Исходный код

Functor ZipList

С момента: base-2.1

Детали экземпляра

Определено в Control.Applicative

Методы

fmap :: (a -> b) -> ZipList a -> ZipList b Исходный код

(<$) :: a -> ZipList b -> ZipList a Исходный код

Functor ArgDescr

С момента: base-4.6.0.0

Подробности экземпляра

Определено в System.Console.GetOpt

Краткое описание методов

fmap :: (a -> b) -> ArgDescr a -> ArgDescr b Source

(<$) :: a -> ArgDescr b -> ArgDescr a Source

Functor OptDescr

Since: base-4.6.0.0

Подробности экземпляра

Определено в System.Console.GetOpt

Краткое описание методов

fmap :: (a -> b) -> OptDescr a -> OptDescr b Source

(<$) :: a -> OptDescr b -> OptDescr a Source

Functor ArgOrder

Since: base-4.6.0.0

Подробности экземпляра

Определено в System.Console.GetOpt

Краткое описание методов

fmap :: (a -> b) -> ArgOrder a -> ArgOrder b Source

(<$) :: a -> ArgOrder b -> ArgOrder a Source

Functor Option

Since: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Краткое описание методов

fmap :: (a -> b) -> Option a -> Option b Source

(<$) :: a -> Option b -> Option a Source

Functor Last

Since: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Краткое описание методов

fmap :: (a -> b) -> Last a -> Last b Source

(<$) :: a -> Last b -> Last a Source

Functor First

Since: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Краткое описание методов

fmap :: (a -> b) -> First a -> First b Source

(<$) :: a -> First b -> First a Source

Functor Max

Since: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Краткое описание методов

fmap :: (a -> b) -> Max a -> Max b Source

(<$) :: a -> Max b -> Max a Source

Functor Min

Since: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Краткое описание методов

fmap :: (a -> b) -> Min a -> Min b Source

(<$) :: a -> Min b -> Min a Source

Functor Complex

Since: base-4.9.0.0

Подробности экземпляра

Определено в Data.Complex

Краткое описание методов

fmap :: (a -> b) -> Complex a -> Complex b Source

(<$) :: a -> Complex b -> Complex a Source

Functor (Either a)

Since: base-3.0

Подробности экземпляра

Определено в Data.Either

Методы

fmap :: (a0 -> b) -> Either a a0 -> Either a b Источник

(<$) :: a0 -> Either a b -> Either a a0 Источник

Functor (V1 :: Type -> Type)

С: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> V1 a -> V1 b Источник

(<$) :: a -> V1 b -> V1 a Источник

Functor (U1 :: Type -> Type)

С: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> U1 a -> U1 b Источник

(<$) :: a -> U1 b -> U1 a Источник

Functor ((,) a)

С: base-2.1

Подробности экземпляра

Определено в GHC.Base

Методы

fmap :: (a0 -> b) -> (a, a0) -> (a, b) Источник

(<$) :: a0 -> (a, b) -> (a, a0) Источник

Functor (ST s)

С: base-2.1

Подробности экземпляра

Определено в GHC.ST

Методы

fmap :: (a -> b) -> ST s a -> ST s b Источник

(<$) :: a -> ST s b -> ST s a Источник

Functor (Array i)

С: base-2.1

Подробности экземпляра

Определено в GHC.Arr

Методы

fmap :: (a -> b) -> Array i a -> Array i b Источник

(<$) :: a -> Array i b -> Array i a Источник

Functor (Proxy :: Type -> Type)

С: base-4.7.0.0

Подробности экземпляра

Определено в Data.Proxy

Методы

fmap :: (a -> b) -> Proxy a -> Proxy b Источник

(<$) :: a -> Proxy b -> Proxy a Источник

Arrow a => Functor (ArrowMonad a)

С: base-4.6.0.0

Подробности экземпляра

Определено в Control.Arrow

Методы

fmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Источник

(<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Источник

Monad m => Functor (WrappedMonad m)

С: base-2.1

Подробности экземпляра

Определено в Control.Applicative

Методы

fmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Источник

(<$) :: a -> WrappedMonad m b -> WrappedMonad m a Источник

Functor (ST s)

С: base-2.1

Информация об экземпляре

Определено в Control.Monad.ST.Lazy.Imp

Методы

fmap :: (a -> b) -> ST s a -> ST s b Источник

(<$) :: a -> ST s b -> ST s a Источник

Functor (Arg a)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в Data.Semigroup

Методы

fmap :: (a0 -> b) -> Arg a a0 -> Arg a b Источник

(<$) :: a0 -> Arg a b -> Arg a a0 Источник

Functor f => Functor (Rec1 f)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> Rec1 f a -> Rec1 f b Источник

(<$) :: a -> Rec1 f b -> Rec1 f a Источник

Functor (URec Char :: Type -> Type)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec Char a -> URec Char b Источник

(<$) :: a -> URec Char b -> URec Char a Источник

Functor (URec Double :: Type -> Type)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec Double a -> URec Double b Источник

(<$) :: a -> URec Double b -> URec Double a Источник

Functor (URec Float :: Type -> Type)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec Float a -> URec Float b Источник

(<$) :: a -> URec Float b -> URec Float a Источник

Functor (URec Int :: Type -> Type)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec Int a -> URec Int b Источник

(<$) :: a -> URec Int b -> URec Int a Источник

Functor (URec Word :: Type -> Type)

С версии: base-4.9.0.0

Информация об экземпляре

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec Word a -> URec Word b Источник

(<$) :: a -> URec Word b -> URec Word a Источник

Functor (URec (Ptr ()) :: Type -> Type)

С версии: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec (Ptr ()) a -> URec (Ptr ()) b Источник

(<$) :: a -> URec (Ptr ()) b -> URec (Ptr ()) a Источник

Functor ((,,) a b)

С версии: base-4.14.0.0

Подробности экземпляра

Определено в GHC.Base

Методы

fmap :: (a0 -> b0) -> (a, b, a0) -> (a, b, b0) Источник

(<$) :: a0 -> (a, b, b0) -> (a, b, a0) Источник

Functor f => Functor (Alt f)

С версии: base-4.8.0.0

Подробности экземпляра

Определено в Data.Semigroup.Internal

Методы

fmap :: (a -> b) -> Alt f a -> Alt f b Источник

(<$) :: a -> Alt f b -> Alt f a Источник

Functor f => Functor (Ap f)

С версии: base-4.12.0.0

Подробности экземпляра

Определено в Data.Monoid

Методы

fmap :: (a -> b) -> Ap f a -> Ap f b Источник

(<$) :: a -> Ap f b -> Ap f a Источник

Functor (Const m :: Type -> Type)

С версии: base-2.1

Подробности экземпляра

Определено в Data.Functor.Const

Методы

fmap :: (a -> b) -> Const m a -> Const m b Источник

(<$) :: a -> Const m b -> Const m a Источник

Functor m => Functor (Kleisli m a)

С версии: base-4.14.0.0

Подробности экземпляра

Определено в Control.Arrow

Методы

fmap :: (a0 -> b) -> Kleisli m a a0 -> Kleisli m a b Источник

(<$) :: a0 -> Kleisli m a b -> Kleisli m a a0 Источник

Arrow a => Functor (WrappedArrow a b)

С версии: base-2.1

Подробности экземпляра

Определено в Control.Applicative

Методы

fmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Источник

(<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Источник

Functor ((->) r :: Type -> Type)

С версии: base-2.1

Подробности экземпляра

Определено в GHC.Base

Методы

fmap :: (a -> b) -> (r -> a) -> r -> b Источник

(<$) :: a -> (r -> b) -> r -> a Источник

Functor (K1 i c :: Type -> Type)

С версии: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> K1 i c a -> K1 i c b Источник

(<$) :: a -> K1 i c b -> K1 i c a Источник

(Functor f, Functor g) => Functor (f :+: g)

С версии: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> (f :+: g) a -> (f :+: g) b Источник

(<$) :: a -> (f :+: g) b -> (f :+: g) a Источник

(Functor f, Functor g) => Functor (f :*: g)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> (f :*: g) a -> (f :*: g) b Источник

(<$) :: a -> (f :*: g) b -> (f :*: g) a Источник

Functor ((,,,) a b c)

С момента: base-4.14.0.0

Подробности экземпляра

Определено в GHC.Base

Методы

fmap :: (a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Источник

(<$) :: a0 -> (a, b, c, b0) -> (a, b, c, a0) Источник

(Functor f, Functor g) => Functor (Sum f g)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в Data.Functor.Sum

Методы

fmap :: (a -> b) -> Sum f g a -> Sum f g b Источник

(<$) :: a -> Sum f g b -> Sum f g a Источник

(Functor f, Functor g) => Functor (Product f g)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в Data.Functor.Product

Методы

fmap :: (a -> b) -> Product f g a -> Product f g b Источник

(<$) :: a -> Product f g b -> Product f g a Источник

Functor f => Functor (M1 i c f)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> M1 i c f a -> M1 i c f b Источник

(<$) :: a -> M1 i c f b -> M1 i c f a Источник

(Functor f, Functor g) => Functor (f :.: g)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> (f :.: g) a -> (f :.: g) b Источник

(<$) :: a -> (f :.: g) b -> (f :.: g) a Источник

(Functor f, Functor g) => Functor (Compose f g)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в Data.Functor.Compose

Методы

fmap :: (a -> b) -> Compose f g a -> Compose f g b Источник

(<$) :: a -> Compose f g b -> Compose f g a Источник

class Applicative m => Monad m where Источник

Класс Monad определяет основные операции над монадой, концепцией из области математики, известной как теория категорий. Однако с точки зрения программиста Haskell лучше всего представлять монаду как абстрактный тип данных действий. do выражения Haskell предоставляют удобную синтаксическую конструкцию для записи монадических выражений.

Экземпляры Monad должны удовлетворять следующим условиям:

Левое тождество
return a >>= k = k a
Правое тождество
m >>= return = m
Ассоциативность
m >>= (\x -> k x >>= h) = (m >>= k) >>= h

Кроме того, операции Monad и Applicative должны быть связаны следующим образом:

  • pure = return
  • m1 <*> m2 = m1 >>= (x1 -> m2 >>= (x2 -> return (x1 x2)))

Вышеуказанные законы подразумевают:

  • fmap f xs  =  xs >>= return . f
  • (>>) = (*>)

и что pure и (<*>) удовлетворяют законам аппликативного функтора.

Примеры Monad для списков, Maybe и IO , определённых в Prelude, удовлетворяют этим законам.

Минимальное полное определение

(>>=)

Методы

(>>=) :: forall a b. m a -> (a -> m b) -> m b infixl 1 Исходный код

Последовательно выполняет два действия, передавая любое значение, произведённое первым действием, в качестве аргумента второму.

'as >>= bs' можно понимать как выражение do

do a <- as
   bs a

(>>) :: forall a b. m a -> m b -> m b infixl 1 Исходный код

Последовательно выполняет два действия, отбрасывая любое значение, произведённое первым, как операторы последовательности (например, точка с запятой) в императивных языках.

'as >> bs' можно понимать как выражение do

do as
   bs

return :: a -> m a Исходный код

Вставляет значение в моноидальный тип.

Экземпляры
Подробности о экземплярах
Monad []

С версии: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

(>>=) :: [a] -> (a -> [b]) -> [b] Исходный код

(>>) :: [a] -> [b] -> [b] Исходный код

return :: a -> [a] Исходный код

Monad Maybe

С версии: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b Исходный код

(>>) :: Maybe a -> Maybe b -> Maybe b Исходный код

return :: a -> Maybe a Исходный код

Monad IO

С версии: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

(>>=) :: IO a -> (a -> IO b) -> IO b Исходный код

(>>) :: IO a -> IO b -> IO b Исходный код

return :: a -> IO a Исходный код

Monad Par1

С версии: base-4.9.0.0

Подробности о экземпляре

Определено в GHC.Generics

Методы

(>>=) :: Par1 a -> (a -> Par1 b) -> Par1 b Исходный код

(>>) :: Par1 a -> Par1 b -> Par1 b Исходный код

return :: a -> Par1 a Исходный код

Monad NonEmpty

С версии: base-4.9.0.0

Подробности о экземпляре

Определено в GHC.Base

Методы

(>>=) :: NonEmpty a -> (a -> NonEmpty b) -> NonEmpty b Исходный код

(>>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Исходный код

return :: a -> NonEmpty a Исходный код

Monad NoIO

С версии: base-4.4.0.0

Подробности о экземпляре

Определено в GHC.GHCi

Методы

(>>=) :: NoIO a -> (a -> NoIO b) -> NoIO b Исходный код

(>>) :: NoIO a -> NoIO b -> NoIO b Исходный код

return :: a -> NoIO a Исходный код

Monad ReadP

С версии: base-2.1

Подробности о экземпляре

Определено в Text.ParserCombinators.ReadP

Методы

(>>=) :: ReadP a -> (a -> ReadP b) -> ReadP b Исходный код

(>>) :: ReadP a -> ReadP b -> ReadP b Исходный код

return :: a -> ReadP a Исходный код

Monad ReadPrec

С версии: base-2.1

Подробности о реализации

Определено в Text.ParserCombinators.ReadPrec

Краткое описание методов

(>>=) :: ReadPrec a -> (a -> ReadPrec b) -> ReadPrec b Source

(>>) :: ReadPrec a -> ReadPrec b -> ReadPrec b Source

return :: a -> ReadPrec a Source

Monad Down

Since: base-4.11.0.0

Подробности о реализации

Определено в Data.Ord

Краткое описание методов

(>>=) :: Down a -> (a -> Down b) -> Down b Source

(>>) :: Down a -> Down b -> Down b Source

return :: a -> Down a Source

Monad Product

Since: base-4.8.0.0

Подробности о реализации

Определено в Data.Semigroup.Internal

Краткое описание методов

(>>=) :: Product a -> (a -> Product b) -> Product b Source

(>>) :: Product a -> Product b -> Product b Source

return :: a -> Product a Source

Monad Sum

Since: base-4.8.0.0

Подробности о реализации

Определено в Data.Semigroup.Internal

Краткое описание методов

(>>=) :: Sum a -> (a -> Sum b) -> Sum b Source

(>>) :: Sum a -> Sum b -> Sum b Source

return :: a -> Sum a Source

Monad Dual

Since: base-4.8.0.0

Подробности о реализации

Определено в Data.Semigroup.Internal

Краткое описание методов

(>>=) :: Dual a -> (a -> Dual b) -> Dual b Source

(>>) :: Dual a -> Dual b -> Dual b Source

return :: a -> Dual a Source

Monad Last

Since: base-4.8.0.0

Подробности о реализации

Определено в Data.Monoid

Краткое описание методов

(>>=) :: Last a -> (a -> Last b) -> Last b Source

(>>) :: Last a -> Last b -> Last b Source

return :: a -> Last a Source

Monad First

Since: base-4.8.0.0

Подробности о реализации

Определено в Data.Monoid

Краткое описание методов

(>>=) :: First a -> (a -> First b) -> First b Source

(>>) :: First a -> First b -> First b Source

return :: a -> First a Source

Monad STM

Since: base-4.3.0.0

Подробности экземпляра

Определено в GHC.Conc.Sync

Методы

(>>=) :: STM a -> (a -> STM b) -> STM b Источник

(>>) :: STM a -> STM b -> STM b Источник

return :: a -> STM a Источник

Monad Identity

С версии: base-4.8.0.0

Подробности экземпляра

Определено в Data.Functor.Identity

Методы

(>>=) :: Identity a -> (a -> Identity b) -> Identity b Источник

(>>) :: Identity a -> Identity b -> Identity b Источник

return :: a -> Identity a Источник

Monad Option

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Методы

(>>=) :: Option a -> (a -> Option b) -> Option b Источник

(>>) :: Option a -> Option b -> Option b Источник

return :: a -> Option a Источник

Monad Last

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Методы

(>>=) :: Last a -> (a -> Last b) -> Last b Источник

(>>) :: Last a -> Last b -> Last b Источник

return :: a -> Last a Источник

Monad First

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Методы

(>>=) :: First a -> (a -> First b) -> First b Источник

(>>) :: First a -> First b -> First b Источник

return :: a -> First a Источник

Monad Max

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Методы

(>>=) :: Max a -> (a -> Max b) -> Max b Источник

(>>) :: Max a -> Max b -> Max b Источник

return :: a -> Max a Источник

Monad Min

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Data.Semigroup

Методы

(>>=) :: Min a -> (a -> Min b) -> Min b Источник

(>>) :: Min a -> Min b -> Min b Источник

return :: a -> Min a Источник

Monad Complex

С версии: base-4.9.0.0

Instance details

Определено в Data.Complex

Методы

(>>=) :: Complex a -> (a -> Complex b) -> Complex b Источник

(>>) :: Complex a -> Complex b -> Complex b Источник

return :: a -> Complex a Источник

Monad (Either e)

С версии: base-4.4.0.0

Instance details

Определено в Data.Either

Методы

(>>=) :: Either e a -> (a -> Either e b) -> Either e b Источник

(>>) :: Either e a -> Either e b -> Either e b Источник

return :: a -> Either e a Источник

Monad (U1 :: Type -> Type)

С версии: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

(>>=) :: U1 a -> (a -> U1 b) -> U1 b Источник

(>>) :: U1 a -> U1 b -> U1 b Источник

return :: a -> U1 a Источник

Monoid a => Monad ((,) a)

С версии: base-4.9.0.0

Instance details

Определено в GHC.Base

Методы

(>>=) :: (a, a0) -> (a0 -> (a, b)) -> (a, b) Источник

(>>) :: (a, a0) -> (a, b) -> (a, b) Источник

return :: a0 -> (a, a0) Источник

Monad (ST s)

С версии: base-2.1

Instance details

Определено в GHC.ST

Методы

(>>=) :: ST s a -> (a -> ST s b) -> ST s b Источник

(>>) :: ST s a -> ST s b -> ST s b Источник

return :: a -> ST s a Источник

Monad (Proxy :: Type -> Type)

С версии: base-4.7.0.0

Instance details

Определено в Data.Proxy

Методы

(>>=) :: Proxy a -> (a -> Proxy b) -> Proxy b Источник

(>>) :: Proxy a -> Proxy b -> Proxy b Источник

return :: a -> Proxy a Источник

ArrowApply a => Monad (ArrowMonad a)

С версии: base-2.1

Instance details

Определено в Control.Arrow

Методы

(>>=) :: ArrowMonad a a0 -> (a0 -> ArrowMonad a b) -> ArrowMonad a b Источник

(>>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Источник

return :: a0 -> ArrowMonad a a0 Источник

Monad m => Monad (WrappedMonad m)

С версии: base-4.7.0.0

Instance details

Определено в Control.Applicative

Методы

(>>=) :: WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b Source

(>>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Source

return :: a -> WrappedMonad m a Source

Monad (ST s)

Since: base-2.1

Instance details

Определено в Control.Monad.ST.Lazy.Imp

Методы

(>>=) :: ST s a -> (a -> ST s b) -> ST s b Source

(>>) :: ST s a -> ST s b -> ST s b Source

return :: a -> ST s a Source

Monad f => Monad (Rec1 f)

Since: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

(>>=) :: Rec1 f a -> (a -> Rec1 f b) -> Rec1 f b Source

(>>) :: Rec1 f a -> Rec1 f b -> Rec1 f b Source

return :: a -> Rec1 f a Source

(Monoid a, Monoid b) => Monad ((,,) a b)

Since: base-4.14.0.0

Instance details

Определено в GHC.Base

Методы

(>>=) :: (a, b, a0) -> (a0 -> (a, b, b0)) -> (a, b, b0) Source

(>>) :: (a, b, a0) -> (a, b, b0) -> (a, b, b0) Source

return :: a0 -> (a, b, a0) Source

Monad f => Monad (Alt f)

Since: base-4.8.0.0

Instance details

Определено в Data.Semigroup.Internal

Методы

(>>=) :: Alt f a -> (a -> Alt f b) -> Alt f b Source

(>>) :: Alt f a -> Alt f b -> Alt f b Source

return :: a -> Alt f a Source

Monad f => Monad (Ap f)

Since: base-4.12.0.0

Instance details

Определено в Data.Monoid

Методы

(>>=) :: Ap f a -> (a -> Ap f b) -> Ap f b Source

(>>) :: Ap f a -> Ap f b -> Ap f b Source

return :: a -> Ap f a Source

Monad m => Monad (Kleisli m a)

Since: base-4.14.0.0

Instance details

Определено в Control.Arrow

Методы

(>>=) :: Kleisli m a a0 -> (a0 -> Kleisli m a b) -> Kleisli m a b Source

(>>) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a b Source

return :: a0 -> Kleisli m a a0 Source

Monad ((->) r :: Type -> Type)

Since: base-2.1

Детали экземпляра

Определено в GHC.Base

Методы

(>>=) :: (r -> a) -> (a -> r -> b) -> r -> b Исходный код

(>>) :: (r -> a) -> (r -> b) -> r -> b Исходный код

return :: a -> r -> a Исходный код

(Monad f, Monad g) => Monad (f :*: g)

С момента: base-4.9.0.0

Детали экземпляра

Определено в GHC.Generics

Методы

(>>=) :: (f :*: g) a -> (a -> (f :*: g) b) -> (f :*: g) b Исходный код

(>>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b Исходный код

return :: a -> (f :*: g) a Исходный код

(Моноид a, Моноид b, Моноид c) => Monad ((,,,) a b c)

С момента: base-4.14.0.0

Детали экземпляра

Определено в GHC.Base

Методы

(>>=) :: (a, b, c, a0) -> (a0 -> (a, b, c, b0)) -> (a, b, c, b0) Исходный код

(>>) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, b0) Исходный код

return :: a0 -> (a, b, c, a0) Исходный код

(Monad f, Monad g) => Monad (Product f g)

С момента: base-4.9.0.0

Детали экземпляра

Определено в Data.Functor.Product

Методы

(>>=) :: Product f g a -> (a -> Product f g b) -> Product f g b Исходный код

(>>) :: Product f g a -> Product f g b -> Product f g b Исходный код

return :: a -> Product f g a Исходный код

Monad f => Monad (M1 i c f)

С момента: base-4.9.0.0

Детали экземпляра

Определено в GHC.Generics

Методы

(>>=) :: M1 i c f a -> (a -> M1 i c f b) -> M1 i c f b Исходный код

(>>) :: M1 i c f a -> M1 i c f b -> M1 i c f b Исходный код

return :: a -> M1 i c f a Исходный код

class Monad m => MonadFail m where Исходный код

Когда значение связывается в do-нотации, шаблон слева от <- может не совпадать. В этом случае этот класс предоставляет функцию восстановления.

Monad без экземпляра MonadFail может использоваться только совместно с шаблонами, которые всегда совпадают, такими как newtypes, кортежи, типы данных только с одним конструктором данных и необратимыми шаблонами (~pat).

Экземпляры MonadFail должны удовлетворять следующему закону: fail s должен быть левым нулём для >>=,

fail s >>= f  =  fail s

Если ваш Monad также MonadPlus, популярное определение —

fail _ = mzero

С момента: base-4.9.0.0

Методы

fail :: Строка -> m a Исходный код

Экземпляры
Подробности экземпляров
MonadFail []

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Control.Monad.Fail

Методы

fail :: String -> [a] Исходный код

MonadFail Maybe

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Control.Monad.Fail

Методы

fail :: String -> Maybe a Исходный код

MonadFail IO

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Control.Monad.Fail

Методы

fail :: String -> IO a Исходный код

MonadFail ReadP

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Text.ParserCombinators.ReadP

Методы

fail :: String -> ReadP a Исходный код

MonadFail ReadPrec

С версии: base-4.9.0.0

Подробности экземпляра

Определено в Text.ParserCombinators.ReadPrec

Методы

fail :: String -> ReadPrec a Исходный код

MonadFail (ST s)

С версии: base-4.11.0.0

Подробности экземпляра

Определено в GHC.ST

Методы

fail :: String -> ST s a Исходный код

MonadFail (ST s)

С версии: base-4.10

Подробности экземпляра

Определено в Control.Monad.ST.Lazy.Imp

Методы

fail :: String -> ST s a Исходный код

MonadFail f => MonadFail (Ap f)

С версии: base-4.12.0.0

Подробности экземпляра

Определено в Data.Monoid

Методы

fail :: String -> Ap f a Исходный код

class (Alternative m, Monad m) => MonadPlus m where Исходный код

Моноиды, которые также поддерживают выбор и ошибки.

Минимальное полное определение

Nothing

Методы

mzero :: m a Исходный код

Нейтральный элемент mplus. Он также должен удовлетворять уравнениям

mzero >>= f  =  mzero
v >> mzero   =  mzero

Определение по умолчанию:

mzero = empty

mplus :: m a -> m a -> m a Исходный код

Ассоциативная операция. Определение по умолчанию:

mplus = (<|>)
Экземпляры
Подробности о экземплярах
MonadPlus []

Since: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

mzero :: [a] Source

mplus :: [a] -> [a] -> [a] Source

MonadPlus Maybe

Since: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

mzero :: Maybe a Source

mplus :: Maybe a -> Maybe a -> Maybe a Source

MonadPlus IO

Since: base-4.9.0.0

Подробности о экземпляре

Определено в GHC.Base

Методы

mzero :: IO a Source

mplus :: IO a -> IO a -> IO a Source

MonadPlus ReadP

Since: base-2.1

Подробности о экземпляре

Определено в Text.ParserCombinators.ReadP

Методы

mzero :: ReadP a Source

mplus :: ReadP a -> ReadP a -> ReadP a Source

MonadPlus ReadPrec

Since: base-2.1

Подробности о экземпляре

Определено в Text.ParserCombinators.ReadPrec

Методы

mzero :: ReadPrec a Source

mplus :: ReadPrec a -> ReadPrec a -> ReadPrec a Source

MonadPlus STM

Since: base-4.3.0.0

Подробности о экземпляре

Определено в GHC.Conc.Sync

Методы

mzero :: STM a Source

mplus :: STM a -> STM a -> STM a Source

MonadPlus Option

Since: base-4.9.0.0

Подробности о экземпляре

Определено в Data.Semigroup

Методы

mzero :: Option a Source

mplus :: Option a -> Option a -> Option a Source

MonadPlus (U1 :: Type -> Type)

Since: base-4.9.0.0

Подробности о экземпляре

Определено в GHC.Generics

Методы

mzero :: U1 a Source

mplus :: U1 a -> U1 a -> U1 a Source

MonadPlus (Proxy :: Type -> Type)

Since: base-4.9.0.0

Подробности о экземпляре

Определено в Data.Proxy

Методы

mzero :: Proxy a Source

mplus :: Proxy a -> Proxy a -> Proxy a Source

(ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a)

Since: base-4.6.0.0

Instance details

Определено в Control.Arrow

Методы

mzero :: ArrowMonad a a0 Source

mplus :: ArrowMonad a a0 -> ArrowMonad a a0 -> ArrowMonad a a0 Source

MonadPlus f => MonadPlus (Rec1 f)

Since: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

mzero :: Rec1 f a Source

mplus :: Rec1 f a -> Rec1 f a -> Rec1 f a Source

MonadPlus f => MonadPlus (Alt f)

Since: base-4.8.0.0

Instance details

Определено в Data.Semigroup.Internal

Методы

mzero :: Alt f a Source

mplus :: Alt f a -> Alt f a -> Alt f a Source

MonadPlus f => MonadPlus (Ap f)

Since: base-4.12.0.0

Instance details

Определено в Data.Monoid

Методы

mzero :: Ap f a Source

mplus :: Ap f a -> Ap f a -> Ap f a Source

MonadPlus m => MonadPlus (Kleisli m a)

Since: base-4.14.0.0

Instance details

Определено в Control.Arrow

Методы

mzero :: Kleisli m a a0 Source

mplus :: Kleisli m a a0 -> Kleisli m a a0 -> Kleisli m a a0 Source

(MonadPlus f, MonadPlus g) => MonadPlus (f :*: g)

Since: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

mzero :: (f :*: g) a Source

mplus :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a Source

(MonadPlus f, MonadPlus g) => MonadPlus (Product f g)

Since: base-4.9.0.0

Instance details

Определено в Data.Functor.Product

Методы

mzero :: Product f g a Source

mplus :: Product f g a -> Product f g a -> Product f g a Source

MonadPlus f => MonadPlus (M1 i c f)

Since: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

mzero :: M1 i c f a Source

mplus :: M1 i c f a -> M1 i c f a -> M1 i c f a Source

Функции

Соглашения об именовании

Функции в этой библиотеке используют следующие соглашения об именовании:

  • Постфикс 'M' всегда обозначает функцию в категории Kleisli: конструктор типа монады m добавляется к результатам функции (с учетом каррирования) и нигде больше. Например,
filter  ::              (a ->   Bool) -> [a] ->   [a]
filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
  • Постфикс '_' изменяет тип результата с (m a) на (m ()). Например:
sequence  :: Monad m => [m a] -> m [a]
sequence_ :: Monad m => [m a] -> m ()
  • Префикс 'm' обобщает существующую функцию до монадической формы. Например:
filter  ::                (a -> Bool) -> [a] -> [a]
mfilter :: MonadPlus m => (a -> Bool) -> m a -> m a

Основные функции Monad

mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) Source

Сопоставляет каждый элемент структуры с монадическим действием, вычисляет эти действия слева направо и собирает результаты. Для версии, которая игнорирует результаты, см. mapM_.

mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m () Source

Применяет к каждому элементу структуры монадическое действие, вычисляет эти действия слева направо и игнорирует результаты. Для версии, которая не игнорирует результаты, см. mapM.

Начиная с base 4.8.0.0, mapM_ это просто traverse_, специализированное для Monad.

forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b) Source

forM — это mapM с переставленными аргументами. Для версии, которая игнорирует результаты, см. forM_.

forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m () Source

forM_ — это mapM_ с переставленными аргументами. Для версии, которая не игнорирует результаты, см. forM.

Начиная с base 4.8.0.0, forM_ это просто for_, специализированное для Monad.

sequence :: (Traversable t, Monad m) => t (m a) -> m (t a) Source

Вычисляет каждое монадическое действие в структуре слева направо и собирает результаты. Для версии, которая игнорирует результаты, см. sequence_.

sequence_ :: (Foldable t, Monad m) => t (m a) -> m () Source

Вычисляет каждое монадическое действие в структуре слева направо и игнорирует результаты. Для версии, которая не игнорирует результаты, см. sequence.

Начиная с base 4.8.0.0, sequence_ это просто sequenceA_, специализированное для Monad.

(=<<) :: Monad m => (a -> m b) -> m a -> m b infixr 1 Source

То же самое, что и >>=, но с переставленными аргументами.

(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c infixr 1 Source

Слева направо композиция стрелок Клейсли.

'(bs >=> cs) a' можно интерпретировать как выражение do

do b <- bs a
   cs b

(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c infixr 1 Source

Справа налево композиция стрелок Клейсли. (>=>), с переставленными аргументами.

Обратите внимание, как этот оператор напоминает композицию функций (.):

(.)   ::            (b ->   c) -> (a ->   b) -> a ->   c
(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c

forever :: Applicative f => f a -> f b Source

Повторяет действие бесконечно.

Используя ApplicativeDo: 'forever as' можно интерпретировать как псевдо-do выражение

do as
   as
   ..

с as повторением.

Примеры
Развернуть

Общее применение forever — обработка ввода с сетевых сокетов, Handle и каналов (например, MVar и Chan).

Например, вот как мы можем реализовать сервер эха, используя forever для прослушивания подключений клиентов по сетевому сокету и для эха ввода клиента на обработчиках подключений клиента:

echoServer :: Socket -> IO ()
echoServer socket = forever $ do
  client <- accept socket
  forkFinally (echo client) (\_ -> hClose client)
  where
    echo :: Handle -> IO ()
    echo client = forever $
      hGetLine client >>= hPutStrLn client

void :: Functor f => f a -> f () Source

void value отбрасывает или игнорирует результат вычисления, например, возвращаемое значение IO действия.

Используя ApplicativeDo: 'void as' можно интерпретировать как выражение do

do as
   pure ()

с выведенным Functor ограничением.

Примеры
Развернуть

Заменить содержимое Maybe Int на единицу:

>>> void Nothing
Nothing
>>> void (Just 3)
Just ()

Заменить содержимое Either Int Int на единицу, что приводит к Either Int ():

>>> void (Left 8675309)
Left 8675309
>>> void (Right 8675309)
Right ()

Заменить каждый элемент списка на единицу:

>>> void [1,2,3]
[(),(),()]

Заменить второй элемент пары на единицу:

>>> void (1,2)
(1,())

Игнорировать результат IO действия:

>>> mapM print [1,2]
1
2
[(),()]
>>> void $ mapM print [1,2]
1
2

Обобщения функций списка

join :: Monad m => m (m a) -> m a Source

Функция join — это стандартный оператор соединения монады. Он используется для удаления одного уровня монадической структуры, проецируя его связанный аргумент на внешний уровень.

'join bss' можно интерпретировать как выражение do

do bs <- bss
   bs
Примеры
Развернуть

Общее применение join — запуск IO вычисления, возвращённого из STM транзакции, так как STM транзакции не могут выполнить IO напрямую. Вспомним, что

atomically :: STM a -> IO a

используется для выполнения STM транзакций атомарно. Таким образом, специализируя типы atomically и join на

atomically :: STM (IO b) -> IO (IO b)
join       :: IO (IO b)  -> IO b

мы можем объединить их как

join . atomically :: STM (IO b) -> IO b

для выполнения STM транзакции и IO действия, которое она возвращает.

msum :: (Foldable t, MonadPlus m) => t (m a) -> m a Source

Сумма коллекции действий, обобщающая concat. Начиная с base 4.8.0.0, msum — это просто asum, специализированное для MonadPlus.

mfilter :: MonadPlus m => (a -> Bool) -> m a -> m a Source

Прямой эквивалент MonadPlus для filter.

Примеры
Развернуть

Функция filter — это просто mfilter, специализированная для монады списка:

filter = ( mfilter :: (a -> Bool) -> [a] -> [a] )

Пример использования mfilter с монадой Maybe:

>>> mfilter odd (Just 1)
Just 1
>>> mfilter odd (Just 2)
Nothing

filterM :: Applicative m => (a -> m Bool) -> [a] -> m [a] Source

Это обобщает функцию filter на основе списков.

mapAndUnzipM :: Applicative m => (a -> m (b, c)) -> [a] -> m ([b], [c]) Source

Функция mapAndUnzipM отображает свой первый аргумент по списку, возвращая результат как пару списков. Эта функция в основном используется со сложными структурами данных или монадой состояния.

zipWithM :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m [c] Source

Функция zipWithM обобщает zipWith до произвольных применительных функторов.

zipWithM_ :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m () Source

zipWithM_ — это расширение zipWithM, которое игнорирует конечный результат.

foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b Source

Функция foldM аналогична foldl, за исключением того, что её результат инкапсулирован в монаду. Обратите внимание, что foldM работает слева направо над аргументами списков. Это может быть проблемой, если (>>) и «функция складывания» не коммутативны.

foldM f a1 [x1, x2, ..., xm]

==

do
  a2 <- f a1 x1
  a3 <- f a2 x2
  ...
  f am xm

Если требуется вычисление справа налево, список ввода должен быть перевёрнут.

Примечание: foldM эквивалентно foldlM

foldM_ :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m () Source

Подобно foldM, но отбрасывает результат.

replicateM :: Applicative m => Int -> m a -> m [a] Source

replicateM n act выполняет действие n раз, собирая результаты.

Используя ApplicativeDo: 'replicateM 5 as' можно понимать как выражение do

do a1 <- as
   a2 <- as
   a3 <- as
   a4 <- as
   a5 <- as
   pure [a1,a2,a3,a4,a5]

Обратите внимание на ограничение Applicative.

replicateM_ :: Applicative m => Int -> m a -> m () Source

Подобно replicateM, но отбрасывает результат.

Условное выполнение монадических выражений

guard :: Alternative f => Bool -> f () Source

Условное прерывание вычислений Alternative. Определяется как

guard True  = pure ()
guard False = empty
Примеры
Развернуть

Общие случаи использования guard включают условное сообщение об ошибке в монаде ошибок и условный отказ от текущего выбора в основанном на Alternative парсере.

В качестве примера сообщения об ошибке в монаде ошибок Maybe, рассмотрим безопасную функцию деления safeDiv x y, которая возвращает Nothing когда знаменатель y равен нулю и Just (x `div` y) в противном случае. Например:

>>> safeDiv 4 0
Nothing
>>> safeDiv 4 2
Just 2

Определение safeDiv с использованием условных операторов, но без guard:

safeDiv :: Int -> Int -> Maybe Int
safeDiv x y | y /= 0    = Just (x `div` y)
            | otherwise = Nothing

Определение safeDiv с использованием guard и Monad do-нотации:

safeDiv :: Int -> Int -> Maybe Int
safeDiv x y = do
  guard (y /= 0)
  return (x `div` y)

when :: Applicative f => Bool -> f () -> f () Source

Условное выполнение выражений Applicative. Например,

when debug (putStrLn "Debugging")

выведет строку Debugging если булево значение debug равно True, и в противном случае ничего не сделает.

unless :: Applicative f => Bool -> f () -> f () Source

Обратная функция к when.

Операторы подъёма монады

liftM :: Monad m => (a1 -> r) -> m a1 -> m r Source

Поднятие функции в монаду.

liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r Source

Поднятие функции в монаду, сканируя монадические аргументы слева направо. Например,

liftM2 (+) [0,1] [0,2] = [0,2,1,3]
liftM2 (+) (Just 1) Nothing = Nothing

liftM3 :: Monad m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r Source

Поднятие функции в монаду, сканируя монадические аргументы слева направо (см. liftM2).

liftM4 :: Monad m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r Source

Поднятие функции в монаду, сканируя монадические аргументы слева направо (см. liftM2).

liftM5 :: Monad m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r Source

Поднятие функции в монаду, сканируя монадические аргументы слева направо (см. liftM2).

ap :: Monad m => m (a -> b) -> m a -> m b Source

Во многих случаях операции liftM могут быть заменены использованием ap, которая продвигает применение функций.

return f `ap` x1 `ap` ... `ap` xn

эквивалентно

liftMn f x1 x2 ... xn

Жесткие монадические функции

(<$!>) :: Monad m => (a -> b) -> m a -> m b infixl 4 Source

Жесткая версия <$>.

С версии: base-4.8.0.0

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Control-Monad.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API