base-4.18.0.0: Basic libraries

GHC.Base

Description

Basic data types and classes.

Synopsis

# Documentation

class Applicative m => Monad m where Source #

The Monad class defines the basic operations over a monad, a concept from a branch of mathematics known as category theory. From the perspective of a Haskell programmer, however, it is best to think of a monad as an abstract datatype of actions. Haskell's do expressions provide a convenient syntax for writing monadic expressions.

Instances of Monad should satisfy the following:

Left identity
return a >>= k = k a
Right identity
m >>= return = m
Associativity
m >>= (\x -> k x >>= h) = (m >>= k) >>= h

Furthermore, the Monad and Applicative operations should relate as follows:

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

The above laws imply:

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

and that pure and (<*>) satisfy the applicative functor laws.

The instances of Monad for lists, Maybe and IO defined in the Prelude satisfy these laws.

Minimal complete definition

(>>=)

Methods

(>>=) :: forall a b. m a -> (a -> m b) -> m b infixl 1 Source #

Sequentially compose two actions, passing any value produced by the first as an argument to the second.

'as >>= bs' can be understood as the do expression

do a <- as
bs a


(>>) :: forall a b. m a -> m b -> m b infixl 1 Source #

Sequentially compose two actions, discarding any value produced by the first, like sequencing operators (such as the semicolon) in imperative languages.

'as >> bs' can be understood as the do expression

do as
bs


return :: a -> m a Source #

Inject a value into the monadic type.

#### Instances

Instances details

class Functor f => Applicative f where Source #

A functor with application, providing operations to

• embed pure expressions (pure), and
• sequence computations and combine their results (<*> and liftA2).

A minimal complete definition must include implementations of pure and of either <*> or liftA2. If it defines both, then they must behave the same as their default definitions:

(<*>) = liftA2 id
liftA2 f x y = f <$> x <*> y Further, any definition must satisfy the following: Identity pure id <*> v = v Composition pure (.) <*> u <*> v <*> w = u <*> (v <*> w) Homomorphism pure f <*> pure x = pure (f x) Interchange u <*> pure y = pure ($ y) <*> u

The other methods have the following default definitions, which may be overridden with equivalent specialized implementations:

• u *> v = (id <$ u) <*> v • u <* v = liftA2 const u v As a consequence of these laws, the Functor instance for f will satisfy • fmap f x = pure f <*> x It may be useful to note that supposing forall x y. p (q x y) = f x . g y it follows from the above that liftA2 p (liftA2 q u v) = liftA2 f u . liftA2 g v If f is also a Monad, it should satisfy • pure = return • m1 <*> m2 = m1 >>= (\x1 -> m2 >>= (\x2 -> return (x1 x2))) • (*>) = (>>) (which implies that pure and <*> satisfy the applicative functor laws). Minimal complete definition pure, ((<*>) | liftA2) Methods pure :: a -> f a Source # Lift a value. (<*>) :: f (a -> b) -> f a -> f b infixl 4 Source # Sequential application. A few functors support an implementation of <*> that is more efficient than the default one. #### Example Expand Used in combination with (<$>), (<*>) can be used to build a record.

>>> data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz}

>>> produceFoo :: Applicative f => f Foo

>>> produceBar :: Applicative f => f Bar
>>> produceBaz :: Applicative f => f Baz

>>> mkState :: Applicative f => f MyState
>>> mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz  liftA2 :: (a -> b -> c) -> f a -> f b -> f c Source # Lift a binary function to actions. Some functors support an implementation of liftA2 that is more efficient than the default one. In particular, if fmap is an expensive operation, it is likely better to use liftA2 than to fmap over the structure and then use <*>. This became a typeclass method in 4.10.0.0. Prior to that, it was a function defined in terms of <*> and fmap. #### Example Expand >>> liftA2 (,) (Just 3) (Just 5) Just (3,5)  (*>) :: f a -> f b -> f b infixl 4 Source # Sequence actions, discarding the value of the first argument. #### Examples Expand If used in conjunction with the Applicative instance for Maybe, you can chain Maybe computations, with a possible "early return" in case of Nothing. >>> Just 2 *> Just 3 Just 3  >>> Nothing *> Just 3 Nothing  Of course a more interesting use case would be to have effectful computations instead of just returning pure values. >>> import Data.Char >>> import Text.ParserCombinators.ReadP >>> let p = string "my name is " *> munch1 isAlpha <* eof >>> readP_to_S p "my name is Simon" [("Simon","")]  (<*) :: f a -> f b -> f a infixl 4 Source # Sequence actions, discarding the value of the second argument. #### Instances Instances details  Source # f <$> ZipList xs1 <*> ... <*> ZipList xsN = ZipList (zipWithN f xs1 ... xsN)where zipWithN refers to the zipWith function of the appropriate arity (zipWith, zipWith3, zipWith4, ...). For example:(\a b c -> stimes c [a, b]) <$> ZipList "abcd" <*> ZipList "567" <*> ZipList [1..] = ZipList (zipWith3 (\a b c -> stimes c [a, b]) "abcd" "567" [1..]) = ZipList {getZipList = ["a5","b6b6","c7c7c7"]}Since: base-2.1 Instance detailsDefined in Control.Applicative Methodspure :: a -> ZipList a Source #(<*>) :: ZipList (a -> b) -> ZipList a -> ZipList b Source #liftA2 :: (a -> b -> c) -> ZipList a -> ZipList b -> ZipList c Source #(*>) :: ZipList a -> ZipList b -> ZipList b Source #(<*) :: ZipList a -> ZipList b -> ZipList a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Complex Methodspure :: a -> Complex a Source #(<*>) :: Complex (a -> b) -> Complex a -> Complex b Source #liftA2 :: (a -> b -> c) -> Complex a -> Complex b -> Complex c Source #(*>) :: Complex a -> Complex b -> Complex b Source #(<*) :: Complex a -> Complex b -> Complex a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Functor.Identity Methodspure :: a -> Identity a Source #(<*>) :: Identity (a -> b) -> Identity a -> Identity b Source #liftA2 :: (a -> b -> c) -> Identity a -> Identity b -> Identity c Source #(*>) :: Identity a -> Identity b -> Identity b Source #(<*) :: Identity a -> Identity b -> Identity a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methodspure :: a -> First a Source #(<*>) :: First (a -> b) -> First a -> First b Source #liftA2 :: (a -> b -> c) -> First a -> First b -> First c Source #(*>) :: First a -> First b -> First b Source #(<*) :: First a -> First b -> First a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methodspure :: a -> Last a Source #(<*>) :: Last (a -> b) -> Last a -> Last b Source #liftA2 :: (a -> b -> c) -> Last a -> Last b -> Last c Source #(*>) :: Last a -> Last b -> Last b Source #(<*) :: Last a -> Last b -> Last a Source # Source # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methodspure :: a -> Down a Source #(<*>) :: Down (a -> b) -> Down a -> Down b Source #liftA2 :: (a -> b -> c) -> Down a -> Down b -> Down c Source #(*>) :: Down a -> Down b -> Down b Source #(<*) :: Down a -> Down b -> Down a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> First a Source #(<*>) :: First (a -> b) -> First a -> First b Source #liftA2 :: (a -> b -> c) -> First a -> First b -> First c Source #(*>) :: First a -> First b -> First b Source #(<*) :: First a -> First b -> First a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Last a Source #(<*>) :: Last (a -> b) -> Last a -> Last b Source #liftA2 :: (a -> b -> c) -> Last a -> Last b -> Last c Source #(*>) :: Last a -> Last b -> Last b Source #(<*) :: Last a -> Last b -> Last a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Max a Source #(<*>) :: Max (a -> b) -> Max a -> Max b Source #liftA2 :: (a -> b -> c) -> Max a -> Max b -> Max c Source #(*>) :: Max a -> Max b -> Max b Source #(<*) :: Max a -> Max b -> Max a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Min a Source #(<*>) :: Min (a -> b) -> Min a -> Min b Source #liftA2 :: (a -> b -> c) -> Min a -> Min b -> Min c Source #(*>) :: Min a -> Min b -> Min b Source #(<*) :: Min a -> Min b -> Min a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Dual a Source #(<*>) :: Dual (a -> b) -> Dual a -> Dual b Source #liftA2 :: (a -> b -> c) -> Dual a -> Dual b -> Dual c Source #(*>) :: Dual a -> Dual b -> Dual b Source #(<*) :: Dual a -> Dual b -> Dual a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Product a Source #(<*>) :: Product (a -> b) -> Product a -> Product b Source #liftA2 :: (a -> b -> c) -> Product a -> Product b -> Product c Source #(*>) :: Product a -> Product b -> Product b Source #(<*) :: Product a -> Product b -> Product a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Sum a Source #(<*>) :: Sum (a -> b) -> Sum a -> Sum b Source #liftA2 :: (a -> b -> c) -> Sum a -> Sum b -> Sum c Source #(*>) :: Sum a -> Sum b -> Sum b Source #(<*) :: Sum a -> Sum b -> Sum a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodspure :: a -> NonEmpty a Source #(<*>) :: NonEmpty (a -> b) -> NonEmpty a -> NonEmpty b Source #liftA2 :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Source #(*>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Source #(<*) :: NonEmpty a -> NonEmpty b -> NonEmpty a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Conc.Sync Methodspure :: a -> STM a Source #(<*>) :: STM (a -> b) -> STM a -> STM b Source #liftA2 :: (a -> b -> c) -> STM a -> STM b -> STM c Source #(*>) :: STM a -> STM b -> STM b Source #(<*) :: STM a -> STM b -> STM a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.GHCi Methodspure :: a -> NoIO a Source #(<*>) :: NoIO (a -> b) -> NoIO a -> NoIO b Source #liftA2 :: (a -> b -> c) -> NoIO a -> NoIO b -> NoIO c Source #(*>) :: NoIO a -> NoIO b -> NoIO b Source #(<*) :: NoIO a -> NoIO b -> NoIO a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> Par1 a Source #(<*>) :: Par1 (a -> b) -> Par1 a -> Par1 b Source #liftA2 :: (a -> b -> c) -> Par1 a -> Par1 b -> Par1 c Source #(*>) :: Par1 a -> Par1 b -> Par1 b Source #(<*) :: Par1 a -> Par1 b -> Par1 a Source # Source # Since: base-4.6.0.0 Instance detailsDefined in Text.ParserCombinators.ReadP Methodspure :: a -> ReadP a Source #(<*>) :: ReadP (a -> b) -> ReadP a -> ReadP b Source #liftA2 :: (a -> b -> c) -> ReadP a -> ReadP b -> ReadP c Source #(*>) :: ReadP a -> ReadP b -> ReadP b Source #(<*) :: ReadP a -> ReadP b -> ReadP a Source # Source # Since: base-4.6.0.0 Instance detailsDefined in Text.ParserCombinators.ReadPrec Methodspure :: a -> ReadPrec a Source #(<*>) :: ReadPrec (a -> b) -> ReadPrec a -> ReadPrec b Source #liftA2 :: (a -> b -> c) -> ReadPrec a -> ReadPrec b -> ReadPrec c Source #(*>) :: ReadPrec a -> ReadPrec b -> ReadPrec b Source #(<*) :: ReadPrec a -> ReadPrec b -> ReadPrec a Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodspure :: a -> IO a Source #(<*>) :: IO (a -> b) -> IO a -> IO b Source #liftA2 :: (a -> b -> c) -> IO a -> IO b -> IO c Source #(*>) :: IO a -> IO b -> IO b Source #(<*) :: IO a -> IO b -> IO a Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodspure :: a -> Maybe a Source #(<*>) :: Maybe (a -> b) -> Maybe a -> Maybe b Source #liftA2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c Source #(*>) :: Maybe a -> Maybe b -> Maybe b Source #(<*) :: Maybe a -> Maybe b -> Maybe a Source # Source # Since: base-4.15 Instance detailsDefined in GHC.Base Methodspure :: a -> Solo a Source #(<*>) :: Solo (a -> b) -> Solo a -> Solo b Source #liftA2 :: (a -> b -> c) -> Solo a -> Solo b -> Solo c Source #(*>) :: Solo a -> Solo b -> Solo b Source #(<*) :: Solo a -> Solo b -> Solo a Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodspure :: a -> [a] Source #(<*>) :: [a -> b] -> [a] -> [b] Source #liftA2 :: (a -> b -> c) -> [a] -> [b] -> [c] Source #(*>) :: [a] -> [b] -> [b] Source #(<*) :: [a] -> [b] -> [a] Source # Monad m => Applicative (WrappedMonad m) Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methodspure :: a -> WrappedMonad m a Source #(<*>) :: WrappedMonad m (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source #liftA2 :: (a -> b -> c) -> WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m c Source #(*>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Source #(<*) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m a Source # Arrow a => Applicative (ArrowMonad a) Source # Since: base-4.6.0.0 Instance detailsDefined in Control.Arrow Methodspure :: a0 -> ArrowMonad a a0 Source #(<*>) :: ArrowMonad a (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source #liftA2 :: (a0 -> b -> c) -> ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a c Source #(*>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Source #(<*) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # Source # Since: base-2.1 Instance detailsDefined in Control.Monad.ST.Lazy.Imp Methodspure :: a -> ST s a Source #(<*>) :: ST s (a -> b) -> ST s a -> ST s b Source #liftA2 :: (a -> b -> c) -> ST s a -> ST s b -> ST s c Source #(*>) :: ST s a -> ST s b -> ST s b Source #(<*) :: ST s a -> ST s b -> ST s a Source # Source # Since: base-3.0 Instance detailsDefined in Data.Either Methodspure :: a -> Either e a Source #(<*>) :: Either e (a -> b) -> Either e a -> Either e b Source #liftA2 :: (a -> b -> c) -> Either e a -> Either e b -> Either e c Source #(*>) :: Either e a -> Either e b -> Either e b Source #(<*) :: Either e a -> Either e b -> Either e a Source # Applicative (Proxy :: Type -> Type) Source # Since: base-4.7.0.0 Instance detailsDefined in Data.Proxy Methodspure :: a -> Proxy a Source #(<*>) :: Proxy (a -> b) -> Proxy a -> Proxy b Source #liftA2 :: (a -> b -> c) -> Proxy a -> Proxy b -> Proxy c Source #(*>) :: Proxy a -> Proxy b -> Proxy b Source #(<*) :: Proxy a -> Proxy b -> Proxy a Source # Applicative (U1 :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> U1 a Source #(<*>) :: U1 (a -> b) -> U1 a -> U1 b Source #liftA2 :: (a -> b -> c) -> U1 a -> U1 b -> U1 c Source #(*>) :: U1 a -> U1 b -> U1 b Source #(<*) :: U1 a -> U1 b -> U1 a Source # Source # Since: base-4.4.0.0 Instance detailsDefined in GHC.ST Methodspure :: a -> ST s a Source #(<*>) :: ST s (a -> b) -> ST s a -> ST s b Source #liftA2 :: (a -> b -> c) -> ST s a -> ST s b -> ST s c Source #(*>) :: ST s a -> ST s b -> ST s b Source #(<*) :: ST s a -> ST s b -> ST s a Source # Monoid a => Applicative ((,) a) Source # For tuples, the Monoid constraint on a determines how the first values merge. For example, Strings concatenate:("hello ", (+15)) <*> ("world!", 2002) ("hello world!",2017)Since: base-2.1 Instance detailsDefined in GHC.Base Methodspure :: a0 -> (a, a0) Source #(<*>) :: (a, a0 -> b) -> (a, a0) -> (a, b) Source #liftA2 :: (a0 -> b -> c) -> (a, a0) -> (a, b) -> (a, c) Source #(*>) :: (a, a0) -> (a, b) -> (a, b) Source #(<*) :: (a, a0) -> (a, b) -> (a, a0) Source # Arrow a => Applicative (WrappedArrow a b) Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methodspure :: a0 -> WrappedArrow a b a0 Source #(<*>) :: WrappedArrow a b (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source #liftA2 :: (a0 -> b0 -> c) -> WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b c Source #(*>) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b b0 Source #(<*) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source # Applicative m => Applicative (Kleisli m a) Source # Since: base-4.14.0.0 Instance detailsDefined in Control.Arrow Methodspure :: a0 -> Kleisli m a a0 Source #(<*>) :: Kleisli m a (a0 -> b) -> Kleisli m a a0 -> Kleisli m a b Source #liftA2 :: (a0 -> b -> c) -> Kleisli m a a0 -> Kleisli m a b -> Kleisli m a c Source #(*>) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a b Source #(<*) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a a0 Source # Monoid m => Applicative (Const m :: Type -> Type) Source # Since: base-2.0.1 Instance detailsDefined in Data.Functor.Const Methodspure :: a -> Const m a Source #(<*>) :: Const m (a -> b) -> Const m a -> Const m b Source #liftA2 :: (a -> b -> c) -> Const m a -> Const m b -> Const m c Source #(*>) :: Const m a -> Const m b -> Const m b Source #(<*) :: Const m a -> Const m b -> Const m a Source # Applicative f => Applicative (Ap f) Source # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methodspure :: a -> Ap f a Source #(<*>) :: Ap f (a -> b) -> Ap f a -> Ap f b Source #liftA2 :: (a -> b -> c) -> Ap f a -> Ap f b -> Ap f c Source #(*>) :: Ap f a -> Ap f b -> Ap f b Source #(<*) :: Ap f a -> Ap f b -> Ap f a Source # Applicative f => Applicative (Alt f) Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Alt f a Source #(<*>) :: Alt f (a -> b) -> Alt f a -> Alt f b Source #liftA2 :: (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c Source #(*>) :: Alt f a -> Alt f b -> Alt f b Source #(<*) :: Alt f a -> Alt f b -> Alt f a Source # (Generic1 f, Applicative (Rep1 f)) => Applicative (Generically1 f) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> Generically1 f a Source #(<*>) :: Generically1 f (a -> b) -> Generically1 f a -> Generically1 f b Source #liftA2 :: (a -> b -> c) -> Generically1 f a -> Generically1 f b -> Generically1 f c Source #(*>) :: Generically1 f a -> Generically1 f b -> Generically1 f b Source #(<*) :: Generically1 f a -> Generically1 f b -> Generically1 f a Source # Applicative f => Applicative (Rec1 f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> Rec1 f a Source #(<*>) :: Rec1 f (a -> b) -> Rec1 f a -> Rec1 f b Source #liftA2 :: (a -> b -> c) -> Rec1 f a -> Rec1 f b -> Rec1 f c Source #(*>) :: Rec1 f a -> Rec1 f b -> Rec1 f b Source #(<*) :: Rec1 f a -> Rec1 f b -> Rec1 f a Source # (Monoid a, Monoid b) => Applicative ((,,) a b) Source # Since: base-4.14.0.0 Instance detailsDefined in GHC.Base Methodspure :: a0 -> (a, b, a0) Source #(<*>) :: (a, b, a0 -> b0) -> (a, b, a0) -> (a, b, b0) Source #liftA2 :: (a0 -> b0 -> c) -> (a, b, a0) -> (a, b, b0) -> (a, b, c) Source #(*>) :: (a, b, a0) -> (a, b, b0) -> (a, b, b0) Source #(<*) :: (a, b, a0) -> (a, b, b0) -> (a, b, a0) Source # (Applicative f, Applicative g) => Applicative (Product f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Product Methodspure :: a -> Product f g a Source #(<*>) :: Product f g (a -> b) -> Product f g a -> Product f g b Source #liftA2 :: (a -> b -> c) -> Product f g a -> Product f g b -> Product f g c Source #(*>) :: Product f g a -> Product f g b -> Product f g b Source #(<*) :: Product f g a -> Product f g b -> Product f g a Source # (Applicative f, Applicative g) => Applicative (f :*: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> (f :*: g) a Source #(<*>) :: (f :*: g) (a -> b) -> (f :*: g) a -> (f :*: g) b Source #liftA2 :: (a -> b -> c) -> (f :*: g) a -> (f :*: g) b -> (f :*: g) c Source #(*>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b Source #(<*) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) a Source # Monoid c => Applicative (K1 i c :: Type -> Type) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> K1 i c a Source #(<*>) :: K1 i c (a -> b) -> K1 i c a -> K1 i c b Source #liftA2 :: (a -> b -> c0) -> K1 i c a -> K1 i c b -> K1 i c c0 Source #(*>) :: K1 i c a -> K1 i c b -> K1 i c b Source #(<*) :: K1 i c a -> K1 i c b -> K1 i c a Source # (Monoid a, Monoid b, Monoid c) => Applicative ((,,,) a b c) Source # Since: base-4.14.0.0 Instance detailsDefined in GHC.Base Methodspure :: a0 -> (a, b, c, a0) Source #(<*>) :: (a, b, c, a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Source #liftA2 :: (a0 -> b0 -> c0) -> (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, c0) Source #(*>) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, b0) Source #(<*) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, a0) Source # Applicative ((->) r) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodspure :: a -> r -> a Source #(<*>) :: (r -> (a -> b)) -> (r -> a) -> r -> b Source #liftA2 :: (a -> b -> c) -> (r -> a) -> (r -> b) -> r -> c Source #(*>) :: (r -> a) -> (r -> b) -> r -> b Source #(<*) :: (r -> a) -> (r -> b) -> r -> a Source # (Applicative f, Applicative g) => Applicative (Compose f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Compose Methodspure :: a -> Compose f g a Source #(<*>) :: Compose f g (a -> b) -> Compose f g a -> Compose f g b Source #liftA2 :: (a -> b -> c) -> Compose f g a -> Compose f g b -> Compose f g c Source #(*>) :: Compose f g a -> Compose f g b -> Compose f g b Source #(<*) :: Compose f g a -> Compose f g b -> Compose f g a Source # (Applicative f, Applicative g) => Applicative (f :.: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> (f :.: g) a Source #(<*>) :: (f :.: g) (a -> b) -> (f :.: g) a -> (f :.: g) b Source #liftA2 :: (a -> b -> c) -> (f :.: g) a -> (f :.: g) b -> (f :.: g) c Source #(*>) :: (f :.: g) a -> (f :.: g) b -> (f :.: g) b Source #(<*) :: (f :.: g) a -> (f :.: g) b -> (f :.: g) a Source # Applicative f => Applicative (M1 i c f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodspure :: a -> M1 i c f a Source #(<*>) :: M1 i c f (a -> b) -> M1 i c f a -> M1 i c f b Source #liftA2 :: (a -> b -> c0) -> M1 i c f a -> M1 i c f b -> M1 i c f c0 Source #(*>) :: M1 i c f a -> M1 i c f b -> M1 i c f b Source #(<*) :: M1 i c f a -> M1 i c f b -> M1 i c f a Source # class Applicative f => Alternative f where Source # A monoid on applicative functors. If defined, some and many should be the least solutions of the equations: • some v = (:) <$> v <*> many v
• many v = some v <|> pure []

Minimal complete definition

Methods

empty :: f a Source #

The identity of <|>

(<|>) :: f a -> f a -> f a infixl 3 Source #

An associative binary operation

some :: f a -> f [a] Source #

One or more.

many :: f a -> f [a] Source #

Zero or more.

#### Instances

Instances details
 Source # Since: base-4.11.0.0 Instance detailsDefined in Control.Applicative Methods(<|>) :: ZipList a -> ZipList a -> ZipList a Source #some :: ZipList a -> ZipList [a] Source #many :: ZipList a -> ZipList [a] Source # Source # Takes the first non-retrying STM action.Since: base-4.8.0.0 Instance detailsDefined in GHC.Conc.Sync Methods(<|>) :: STM a -> STM a -> STM a Source #some :: STM a -> STM [a] Source #many :: STM a -> STM [a] Source # Source # Since: base-4.6.0.0 Instance detailsDefined in Text.ParserCombinators.ReadP Methods(<|>) :: ReadP a -> ReadP a -> ReadP a Source #some :: ReadP a -> ReadP [a] Source #many :: ReadP a -> ReadP [a] Source # Source # Since: base-4.6.0.0 Instance detailsDefined in Text.ParserCombinators.ReadPrec Methods(<|>) :: ReadPrec a -> ReadPrec a -> ReadPrec a Source #some :: ReadPrec a -> ReadPrec [a] Source #many :: ReadPrec a -> ReadPrec [a] Source # Source # Takes the first non-throwing IO action's result. empty throws an exception.Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<|>) :: IO a -> IO a -> IO a Source #some :: IO a -> IO [a] Source #many :: IO a -> IO [a] Source # Source # Picks the leftmost Just value, or, alternatively, Nothing.Since: base-2.1 Instance detailsDefined in GHC.Base Methods(<|>) :: Maybe a -> Maybe a -> Maybe a Source #some :: Maybe a -> Maybe [a] Source #many :: Maybe a -> Maybe [a] Source # Source # Combines lists by concatenation, starting from the empty list.Since: base-2.1 Instance detailsDefined in GHC.Base Methodsempty :: [a] Source #(<|>) :: [a] -> [a] -> [a] Source #some :: [a] -> [[a]] Source #many :: [a] -> [[a]] Source # Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methods(<|>) :: WrappedMonad m a -> WrappedMonad m a -> WrappedMonad m a Source #some :: WrappedMonad m a -> WrappedMonad m [a] Source #many :: WrappedMonad m a -> WrappedMonad m [a] Source # Source # Since: base-4.6.0.0 Instance detailsDefined in Control.Arrow Methodsempty :: ArrowMonad a a0 Source #(<|>) :: ArrowMonad a a0 -> ArrowMonad a a0 -> ArrowMonad a a0 Source #some :: ArrowMonad a a0 -> ArrowMonad a [a0] Source #many :: ArrowMonad a a0 -> ArrowMonad a [a0] Source # Alternative (Proxy :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Proxy Methods(<|>) :: Proxy a -> Proxy a -> Proxy a Source #some :: Proxy a -> Proxy [a] Source #many :: Proxy a -> Proxy [a] Source # Alternative (U1 :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methods(<|>) :: U1 a -> U1 a -> U1 a Source #some :: U1 a -> U1 [a] Source #many :: U1 a -> U1 [a] Source # (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methodsempty :: WrappedArrow a b a0 Source #(<|>) :: WrappedArrow a b a0 -> WrappedArrow a b a0 -> WrappedArrow a b a0 Source #some :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Source #many :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Source # Alternative m => Alternative (Kleisli m a) Source # Since: base-4.14.0.0 Instance detailsDefined in Control.Arrow Methodsempty :: Kleisli m a a0 Source #(<|>) :: Kleisli m a a0 -> Kleisli m a a0 -> Kleisli m a a0 Source #some :: Kleisli m a a0 -> Kleisli m a [a0] Source #many :: Kleisli m a a0 -> Kleisli m a [a0] Source # Alternative f => Alternative (Ap f) Source # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methodsempty :: Ap f a Source #(<|>) :: Ap f a -> Ap f a -> Ap f a Source #some :: Ap f a -> Ap f [a] Source #many :: Ap f a -> Ap f [a] Source # Alternative f => Alternative (Alt f) Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsempty :: Alt f a Source #(<|>) :: Alt f a -> Alt f a -> Alt f a Source #some :: Alt f a -> Alt f [a] Source #many :: Alt f a -> Alt f [a] Source # (Generic1 f, Alternative (Rep1 f)) => Alternative (Generically1 f) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Generics Methods(<|>) :: Generically1 f a -> Generically1 f a -> Generically1 f a Source #some :: Generically1 f a -> Generically1 f [a] Source #many :: Generically1 f a -> Generically1 f [a] Source # Alternative f => Alternative (Rec1 f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsempty :: Rec1 f a Source #(<|>) :: Rec1 f a -> Rec1 f a -> Rec1 f a Source #some :: Rec1 f a -> Rec1 f [a] Source #many :: Rec1 f a -> Rec1 f [a] Source # (Alternative f, Alternative g) => Alternative (Product f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Product Methodsempty :: Product f g a Source #(<|>) :: Product f g a -> Product f g a -> Product f g a Source #some :: Product f g a -> Product f g [a] Source #many :: Product f g a -> Product f g [a] Source # (Alternative f, Alternative g) => Alternative (f :*: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsempty :: (f :*: g) a Source #(<|>) :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a Source #some :: (f :*: g) a -> (f :*: g) [a] Source #many :: (f :*: g) a -> (f :*: g) [a] Source # (Alternative f, Applicative g) => Alternative (Compose f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Compose Methodsempty :: Compose f g a Source #(<|>) :: Compose f g a -> Compose f g a -> Compose f g a Source #some :: Compose f g a -> Compose f g [a] Source #many :: Compose f g a -> Compose f g [a] Source # (Alternative f, Applicative g) => Alternative (f :.: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsempty :: (f :.: g) a Source #(<|>) :: (f :.: g) a -> (f :.: g) a -> (f :.: g) a Source #some :: (f :.: g) a -> (f :.: g) [a] Source #many :: (f :.: g) a -> (f :.: g) [a] Source # Alternative f => Alternative (M1 i c f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsempty :: M1 i c f a Source #(<|>) :: M1 i c f a -> M1 i c f a -> M1 i c f a Source #some :: M1 i c f a -> M1 i c f [a] Source #many :: M1 i c f a -> M1 i c f [a] Source #

class Functor f where Source #

A type f is a Functor if it provides a function fmap which, given any types a and b lets you apply any function from (a -> b) to turn an f a into an f b, preserving the structure of f. Furthermore f needs to adhere to the following:

Identity
fmap id == id
Composition
fmap (f . g) == fmap f . fmap g

Note, that the second law follows from the free theorem of the type fmap and the first law, so you need only check that the former condition holds. See https://www.schoolofhaskell.com/user/edwardk/snippets/fmap or https://github.com/quchen/articles/blob/master/second_functor_law.md for an explanation.

Minimal complete definition

fmap

Methods

fmap :: (a -> b) -> f a -> f b Source #

fmap is used to apply a function of type (a -> b) to a value of type f a, where f is a functor, to produce a value of type f b. Note that for any type constructor with more than one parameter (e.g., Either), only the last type parameter can be modified with fmap (e.g., b in Either a b).

Some type constructors with two parameters or more have a Bifunctor instance that allows both the last and the penultimate parameters to be mapped over.

#### Examples

Expand

Convert from a Maybe Int to a Maybe String using show:

>>> fmap show Nothing
Nothing
>>> fmap show (Just 3)
Just "3"


Convert from an Either Int Int to an Either Int String using show:

>>> fmap show (Left 17)
Left 17
>>> fmap show (Right 17)
Right "17"


Double each element of a list:

>>> fmap (*2) [1,2,3]
[2,4,6]


Apply even to the second element of a pair:

>>> fmap even (2,2)
(2,True)


It may seem surprising that the function is only applied to the last element of the tuple compared to the list example above which applies it to every element in the list. To understand, remember that tuples are type constructors with multiple type parameters: a tuple of 3 elements (a,b,c) can also be written (,,) a b c and its Functor instance is defined for Functor ((,,) a b) (i.e., only the third parameter is free to be mapped over with fmap).

It explains why fmap can be used with tuples containing values of different types as in the following example:

>>> fmap even ("hello", 1.0, 4)
("hello",1.0,True)


(<$) :: a -> f b -> f a infixl 4 Source # Replace all locations in the input with the same value. The default definition is fmap . const, but this may be overridden with a more efficient version. #### Examples Expand Perform a computation with Maybe and replace the result with a constant value if it is Just: >>> 'a' <$ Just 2
Just 'a'
>>> 'a' <$Nothing Nothing  #### Instances Instances details  Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methodsfmap :: (a -> b) -> ZipList a -> ZipList b Source #(<$) :: a -> ZipList b -> ZipList a Source # Source # Since: base-4.6.0.0 Instance detailsDefined in Control.Exception Methodsfmap :: (a -> b) -> Handler a -> Handler b Source #(<$) :: a -> Handler b -> Handler a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Complex Methodsfmap :: (a -> b) -> Complex a -> Complex b Source #(<$) :: a -> Complex b -> Complex a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Functor.Identity Methodsfmap :: (a -> b) -> Identity a -> Identity b Source #(<$) :: a -> Identity b -> Identity a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> Last a -> Last b Source #(<$) :: a -> Last b -> Last a Source # Source # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methodsfmap :: (a -> b) -> Down a -> Down b Source #(<$) :: a -> Down b -> Down a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Last a -> Last b Source #(<$) :: a -> Last b -> Last a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Max a -> Max b Source #(<$) :: a -> Max b -> Max a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Min a -> Min b Source #(<$) :: a -> Min b -> Min a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Dual a -> Dual b Source #(<$) :: a -> Dual b -> Dual a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Product a -> Product b Source #(<$) :: a -> Product b -> Product a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Sum a -> Sum b Source #(<$) :: a -> Sum b -> Sum a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> NonEmpty a -> NonEmpty b Source #(<$) :: a -> NonEmpty b -> NonEmpty a Source # Source # Since: base-4.3.0.0 Instance detailsDefined in GHC.Conc.Sync Methodsfmap :: (a -> b) -> STM a -> STM b Source #(<$) :: a -> STM b -> STM a Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.GHCi Methodsfmap :: (a -> b) -> NoIO a -> NoIO b Source #(<$) :: a -> NoIO b -> NoIO a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> Par1 a -> Par1 b Source #(<$) :: a -> Par1 b -> Par1 a Source # Source # Since: base-4.7.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> ArgDescr a -> ArgDescr b Source #(<$) :: a -> ArgDescr b -> ArgDescr a Source # Source # Since: base-4.7.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> ArgOrder a -> ArgOrder b Source #(<$) :: a -> ArgOrder b -> ArgOrder a Source # Source # Since: base-4.7.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> OptDescr a -> OptDescr b Source #(<$) :: a -> OptDescr b -> OptDescr a Source # Source # Since: base-2.1 Instance detailsDefined in Text.ParserCombinators.ReadP Methodsfmap :: (a -> b) -> ReadP a -> ReadP b Source #(<$) :: a -> ReadP b -> ReadP a Source # Source # Since: base-2.1 Instance detailsDefined in Text.ParserCombinators.ReadPrec Methodsfmap :: (a -> b) -> ReadPrec a -> ReadPrec b Source #(<$) :: a -> ReadPrec b -> ReadPrec a Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> IO a -> IO b Source #(<$) :: a -> IO b -> IO a Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> Maybe a -> Maybe b Source #(<$) :: a -> Maybe b -> Maybe a Source # Source # Since: base-4.15 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> Solo a -> Solo b Source #(<$) :: a -> Solo b -> Solo a Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> [a] -> [b] Source #(<$) :: a -> [b] -> [a] Source # Monad m => Functor (WrappedMonad m) Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methodsfmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source #(<$) :: a -> WrappedMonad m b -> WrappedMonad m a Source # Arrow a => Functor (ArrowMonad a) Source # Since: base-4.6.0.0 Instance detailsDefined in Control.Arrow Methodsfmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source #(<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # Functor (ST s) Source # Since: base-2.1 Instance detailsDefined in Control.Monad.ST.Lazy.Imp Methodsfmap :: (a -> b) -> ST s a -> ST s b Source #(<$) :: a -> ST s b -> ST s a Source # Source # Since: base-3.0 Instance detailsDefined in Data.Either Methodsfmap :: (a0 -> b) -> Either a a0 -> Either a b Source #(<$) :: a0 -> Either a b -> Either a a0 Source # Functor (Proxy :: Type -> Type) Source # Since: base-4.7.0.0 Instance detailsDefined in Data.Proxy Methodsfmap :: (a -> b) -> Proxy a -> Proxy b Source #(<$) :: a -> Proxy b -> Proxy a Source # Functor (Arg a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a0 -> b) -> Arg a a0 -> Arg a b Source #(<$) :: a0 -> Arg a b -> Arg a a0 Source # Functor (Array i) Source # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsfmap :: (a -> b) -> Array i a -> Array i b Source #(<$) :: a -> Array i b -> Array i a Source # Functor (U1 :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> U1 a -> U1 b Source #(<$) :: a -> U1 b -> U1 a Source # Functor (V1 :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> V1 a -> V1 b Source #(<$) :: a -> V1 b -> V1 a Source # Functor (ST s) Source # Since: base-2.1 Instance detailsDefined in GHC.ST Methodsfmap :: (a -> b) -> ST s a -> ST s b Source #(<$) :: a -> ST s b -> ST s a Source # Functor ((,) a) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b) -> (a, a0) -> (a, b) Source #(<$) :: a0 -> (a, b) -> (a, a0) Source # Arrow a => Functor (WrappedArrow a b) Source # Since: base-2.1 Instance detailsDefined in Control.Applicative Methodsfmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source #(<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source # Functor m => Functor (Kleisli m a) Source # Since: base-4.14.0.0 Instance detailsDefined in Control.Arrow Methodsfmap :: (a0 -> b) -> Kleisli m a a0 -> Kleisli m a b Source #(<$) :: a0 -> Kleisli m a b -> Kleisli m a a0 Source # Functor (Const m :: Type -> Type) Source # Since: base-2.1 Instance detailsDefined in Data.Functor.Const Methodsfmap :: (a -> b) -> Const m a -> Const m b Source #(<$) :: a -> Const m b -> Const m a Source # Functor f => Functor (Ap f) Source # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> Ap f a -> Ap f b Source #(<$) :: a -> Ap f b -> Ap f a Source # Functor f => Functor (Alt f) Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Alt f a -> Alt f b Source #(<$) :: a -> Alt f b -> Alt f a Source # (Generic1 f, Functor (Rep1 f)) => Functor (Generically1 f) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> Generically1 f a -> Generically1 f b Source #(<$) :: a -> Generically1 f b -> Generically1 f a Source # Functor f => Functor (Rec1 f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> Rec1 f a -> Rec1 f b Source #(<$) :: a -> Rec1 f b -> Rec1 f a Source # Functor (URec (Ptr ()) :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec (Ptr ()) a -> URec (Ptr ()) b Source #(<$) :: a -> URec (Ptr ()) b -> URec (Ptr ()) a Source # Functor (URec Char :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Char a -> URec Char b Source #(<$) :: a -> URec Char b -> URec Char a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Double a -> URec Double b Source #(<$) :: a -> URec Double b -> URec Double a Source # Functor (URec Float :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Float a -> URec Float b Source #(<$) :: a -> URec Float b -> URec Float a Source # Functor (URec Int :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Int a -> URec Int b Source #(<$) :: a -> URec Int b -> URec Int a Source # Functor (URec Word :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Word a -> URec Word b Source #(<$) :: a -> URec Word b -> URec Word a Source # Functor ((,,) a b) Source # Since: base-4.14.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b0) -> (a, b, a0) -> (a, b, b0) Source #(<$) :: a0 -> (a, b, b0) -> (a, b, a0) Source # (Functor f, Functor g) => Functor (Product f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Product Methodsfmap :: (a -> b) -> Product f g a -> Product f g b Source #(<$) :: a -> Product f g b -> Product f g a Source # (Functor f, Functor g) => Functor (Sum f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Sum Methodsfmap :: (a -> b) -> Sum f g a -> Sum f g b Source #(<$) :: a -> Sum f g b -> Sum f g a Source # (Functor f, Functor g) => Functor (f :*: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> (f :*: g) a -> (f :*: g) b Source #(<$) :: a -> (f :*: g) b -> (f :*: g) a Source # (Functor f, Functor g) => Functor (f :+: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> (f :+: g) a -> (f :+: g) b Source #(<$) :: a -> (f :+: g) b -> (f :+: g) a Source # Functor (K1 i c :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> K1 i c a -> K1 i c b Source #(<$) :: a -> K1 i c b -> K1 i c a Source # Functor ((,,,) a b c) Source # Since: base-4.14.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Source #(<$) :: a0 -> (a, b, c, b0) -> (a, b, c, a0) Source # Functor ((->) r) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> (r -> a) -> r -> b Source #(<$) :: a -> (r -> b) -> r -> a Source # (Functor f, Functor g) => Functor (Compose f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Compose Methodsfmap :: (a -> b) -> Compose f g a -> Compose f g b Source #(<$) :: a -> Compose f g b -> Compose f g a Source # (Functor f, Functor g) => Functor (f :.: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> (f :.: g) a -> (f :.: g) b Source #(<$) :: a -> (f :.: g) b -> (f :.: g) a Source # Functor f => Functor (M1 i c f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> M1 i c f a -> M1 i c f b Source #(<$) :: a -> M1 i c f b -> M1 i c f a Source # Functor ((,,,,) a b c d) Source # Since: base-4.18.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, d, a0) -> (a, b, c, d, b0) Source #(<$) :: a0 -> (a, b, c, d, b0) -> (a, b, c, d, a0) Source # Functor ((,,,,,) a b c d e) Source # Since: base-4.18.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, d, e, a0) -> (a, b, c, d, e, b0) Source #(<$) :: a0 -> (a, b, c, d, e, b0) -> (a, b, c, d, e, a0) Source # Functor ((,,,,,,) a b c d e f) Source # Since: base-4.18.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, d, e, f, a0) -> (a, b, c, d, e, f, b0) Source #(<$) :: a0 -> (a, b, c, d, e, f, b0) -> (a, b, c, d, e, f, a0) Source #

Monads that also support choice and failure.

Minimal complete definition

Nothing

Methods

mzero :: m a Source #

The identity of mplus. It should also satisfy the equations

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

The default definition is

mzero = empty


mplus :: m a -> m a -> m a Source #

An associative operation. The default definition is

mplus = (<|>)


#### Instances

Instances details
 Source # Takes the first non-retrying STM action.Since: base-4.3.0.0 Instance detailsDefined in GHC.Conc.Sync Methodsmplus :: STM a -> STM a -> STM a Source # Source # Since: base-2.1 Instance detailsDefined in Text.ParserCombinators.ReadP Methodsmplus :: ReadP a -> ReadP a -> ReadP a Source # Source # Since: base-2.1 Instance detailsDefined in Text.ParserCombinators.ReadPrec Methodsmplus :: ReadPrec a -> ReadPrec a -> ReadPrec a Source # Source # Takes the first non-throwing IO action's result. mzero throws an exception.Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsmplus :: IO a -> IO a -> IO a Source # Source # Picks the leftmost Just value, or, alternatively, Nothing.Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmplus :: Maybe a -> Maybe a -> Maybe a Source # Source # Combines lists by concatenation, starting from the empty list.Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmzero :: [a] Source #mplus :: [a] -> [a] -> [a] Source # (ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) Source # Since: base-4.6.0.0 Instance detailsDefined in Control.Arrow Methodsmzero :: ArrowMonad a a0 Source #mplus :: ArrowMonad a a0 -> ArrowMonad a a0 -> ArrowMonad a a0 Source # MonadPlus (Proxy :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Proxy Methodsmplus :: Proxy a -> Proxy a -> Proxy a Source # MonadPlus (U1 :: Type -> Type) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsmplus :: U1 a -> U1 a -> U1 a Source # MonadPlus m => MonadPlus (Kleisli m a) Source # Since: base-4.14.0.0 Instance detailsDefined in Control.Arrow Methodsmzero :: Kleisli m a a0 Source #mplus :: Kleisli m a a0 -> Kleisli m a a0 -> Kleisli m a a0 Source # MonadPlus f => MonadPlus (Ap f) Source # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methodsmzero :: Ap f a Source #mplus :: Ap f a -> Ap f a -> Ap f a Source # MonadPlus f => MonadPlus (Alt f) Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsmzero :: Alt f a Source #mplus :: Alt f a -> Alt f a -> Alt f a Source # MonadPlus f => MonadPlus (Rec1 f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsmzero :: Rec1 f a Source #mplus :: Rec1 f a -> Rec1 f a -> Rec1 f a Source # (MonadPlus f, MonadPlus g) => MonadPlus (Product f g) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Product Methodsmzero :: Product f g a Source #mplus :: Product f g a -> Product f g a -> Product f g a Source # (MonadPlus f, MonadPlus g) => MonadPlus (f :*: g) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsmzero :: (f :*: g) a Source #mplus :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a Source # MonadPlus f => MonadPlus (M1 i c f) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsmzero :: M1 i c f a Source #mplus :: M1 i c f a -> M1 i c f a -> M1 i c f a Source #

type String = [Char] Source #

A String is a list of characters. String constants in Haskell are values of type String.

See Data.List for operations on lists.

class Semigroup a => Monoid a where Source #

The class of monoids (types with an associative binary operation that has an identity). Instances should satisfy the following:

Right identity
x <> mempty = x
Left identity
mempty <> x = x
Associativity
x <> (y <> z) = (x <> y) <> z (Semigroup law)
Concatenation
mconcat = foldr (<>) mempty

You can alternatively define mconcat instead of mempty, in which case the laws are:

Unit
mconcat (pure x) = x
Multiplication
mconcat (join xss) = mconcat (fmap mconcat xss)
Subclass
mconcat (toList xs) = sconcat xs

The method names refer to the monoid of lists under concatenation, but there are many other instances.

Some types can be viewed as a monoid in more than one way, e.g. both addition and multiplication on numbers. In such cases we often define newtypes and make those instances of Monoid, e.g. Sum and Product.

NOTE: Semigroup is a superclass of Monoid since base-4.11.0.0.

Minimal complete definition

Methods

mempty :: a Source #

Identity of mappend

>>> "Hello world" <> mempty
"Hello world"


mappend :: a -> a -> a Source #

An associative operation

NOTE: This method is redundant and has the default implementation mappend = (<>) since base-4.11.0.0. Should it be implemented manually, since mappend is a synonym for (<>), it is expected that the two functions are defined the same way. In a future GHC release mappend will be removed from Monoid.

mconcat :: [a] -> a Source #

Fold a list using the monoid.

For most types, the default definition for mconcat will be used, but the function is included in the class definition so that an optimized version can be provided for specific types.

>>> mconcat ["Hello", " ", "Haskell", "!"]
"Hello Haskell!"


#### Instances

Instances details
 Source # Since: base-4.17.0.0 Instance detailsDefined in Data.Array.Byte Methodsmconcat :: [ByteArray] -> ByteArray Source # Source # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: All -> All -> All Source #mconcat :: [All] -> All Source # Source # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Any -> Any -> Any Source #mconcat :: [Any] -> Any Source # Source # Since: base-4.4.0.0 Instance detailsDefined in GHC.Event.Internal.Types Methodsmconcat :: [Event] -> Event Source # Source # mappend takes the longer of two lifetimes.Since: base-4.8.0.0 Instance detailsDefined in GHC.Event.Internal.Types Methodsmconcat :: [Lifetime] -> Lifetime Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmconcat :: [Ordering] -> Ordering Source # Monoid () Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: () Source #mappend :: () -> () -> () Source #mconcat :: [()] -> () Source # FiniteBits a => Monoid (And a) Source # This constraint is arguably too strong. However, as some types (such as Natural) have undefined complement, this is the only safe choice.Since: base-4.16 Instance detailsDefined in Data.Bits Methodsmappend :: And a -> And a -> And a Source #mconcat :: [And a] -> And a Source # FiniteBits a => Monoid (Iff a) Source # This constraint is arguably too strong. However, as some types (such as Natural) have undefined complement, this is the only safe choice.Since: base-4.16 Instance detailsDefined in Data.Bits Methodsmappend :: Iff a -> Iff a -> Iff a Source #mconcat :: [Iff a] -> Iff a Source # Bits a => Monoid (Ior a) Source # Since: base-4.16 Instance detailsDefined in Data.Bits Methodsmappend :: Ior a -> Ior a -> Ior a Source #mconcat :: [Ior a] -> Ior a Source # Bits a => Monoid (Xor a) Source # Since: base-4.16 Instance detailsDefined in Data.Bits Methodsmappend :: Xor a -> Xor a -> Xor a Source #mconcat :: [Xor a] -> Xor a Source # Source # mempty on comparisons always returns EQ. Without newtypes this equals pure (pure EQ).mempty :: Comparison a mempty = Comparison _ _ -> EQ  Instance detailsDefined in Data.Functor.Contravariant Methodsmappend :: Comparison a -> Comparison a -> Comparison a Source #mconcat :: [Comparison a] -> Comparison a Source # Source # mempty on equivalences always returns True. Without newtypes this equals pure (pure True).mempty :: Equivalence a mempty = Equivalence _ _ -> True  Instance detailsDefined in Data.Functor.Contravariant Methodsmconcat :: [Equivalence a] -> Equivalence a Source # Source # mempty on predicates always returns True. Without newtypes this equals pure True.mempty :: Predicate a mempty = _ -> True  Instance detailsDefined in Data.Functor.Contravariant Methodsmappend :: Predicate a -> Predicate a -> Predicate a Source #mconcat :: [Predicate a] -> Predicate a Source # Monoid a => Monoid (Identity a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Identity Methodsmappend :: Identity a -> Identity a -> Identity a Source #mconcat :: [Identity a] -> Identity a Source # Monoid (First a) Source # Since: base-2.1 Instance detailsDefined in Data.Monoid Methodsmappend :: First a -> First a -> First a Source #mconcat :: [First a] -> First a Source # Monoid (Last a) Source # Since: base-2.1 Instance detailsDefined in Data.Monoid Methodsmappend :: Last a -> Last a -> Last a Source #mconcat :: [Last a] -> Last a Source # Monoid a => Monoid (Down a) Source # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methodsmappend :: Down a -> Down a -> Down a Source #mconcat :: [Down a] -> Down a Source # (Ord a, Bounded a) => Monoid (Max a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmappend :: Max a -> Max a -> Max a Source #mconcat :: [Max a] -> Max a Source # (Ord a, Bounded a) => Monoid (Min a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmappend :: Min a -> Min a -> Min a Source #mconcat :: [Min a] -> Min a Source # Monoid m => Monoid (WrappedMonoid m) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmconcat :: [WrappedMonoid m] -> WrappedMonoid m Source # Monoid a => Monoid (Dual a) Source # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Dual a -> Dual a -> Dual a Source #mconcat :: [Dual a] -> Dual a Source # Monoid (Endo a) Source # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Endo a -> Endo a -> Endo a Source #mconcat :: [Endo a] -> Endo a Source # Num a => Monoid (Product a) Source # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Product a -> Product a -> Product a Source #mconcat :: [Product a] -> Product a Source # Num a => Monoid (Sum a) Source # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Sum a -> Sum a -> Sum a Source #mconcat :: [Sum a] -> Sum a Source # Monoid a => Monoid (STM a) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Conc.Sync Methodsmappend :: STM a -> STM a -> STM a Source #mconcat :: [STM a] -> STM a Source # (Generic a, Monoid (Rep a ())) => Monoid (Generically a) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Generics Methodsmconcat :: [Generically a] -> Generically a Source # Monoid p => Monoid (Par1 p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmappend :: Par1 p -> Par1 p -> Par1 p Source #mconcat :: [Par1 p] -> Par1 p Source # Monoid a => Monoid (IO a) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsmappend :: IO a -> IO a -> IO a Source #mconcat :: [IO a] -> IO a Source # Semigroup a => Monoid (Maybe a) Source # Lift a semigroup into Maybe forming a Monoid according to http://en.wikipedia.org/wiki/Monoid: "Any semigroup S may be turned into a monoid simply by adjoining an element e not in S and defining e*e = e and e*s = s = s*e for all s ∈ S."Since 4.11.0: constraint on inner a value generalised from Monoid to Semigroup.Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmappend :: Maybe a -> Maybe a -> Maybe a Source #mconcat :: [Maybe a] -> Maybe a Source # Monoid a => Monoid (a) Source # Since: base-4.15 Instance detailsDefined in GHC.Base Methodsmempty :: (a) Source #mappend :: (a) -> (a) -> (a) Source #mconcat :: [(a)] -> (a) Source # Monoid [a] Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: [a] Source #mappend :: [a] -> [a] -> [a] Source #mconcat :: [[a]] -> [a] Source # Monoid a => Monoid (Op a b) Source # mempty @(Op a b) without newtypes is mempty @(b->a) = _ -> mempty.mempty :: Op a b mempty = Op _ -> mempty  Instance detailsDefined in Data.Functor.Contravariant Methodsmempty :: Op a b Source #mappend :: Op a b -> Op a b -> Op a b Source #mconcat :: [Op a b] -> Op a b Source # Monoid (Proxy s) Source # Since: base-4.7.0.0 Instance detailsDefined in Data.Proxy Methodsmappend :: Proxy s -> Proxy s -> Proxy s Source #mconcat :: [Proxy s] -> Proxy s Source # Monoid (U1 p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmappend :: U1 p -> U1 p -> U1 p Source #mconcat :: [U1 p] -> U1 p Source # Monoid a => Monoid (ST s a) Source # Since: base-4.11.0.0 Instance detailsDefined in GHC.ST Methodsmempty :: ST s a Source #mappend :: ST s a -> ST s a -> ST s a Source #mconcat :: [ST s a] -> ST s a Source # (Monoid a, Monoid b) => Monoid (a, b) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b) Source #mappend :: (a, b) -> (a, b) -> (a, b) Source #mconcat :: [(a, b)] -> (a, b) Source # Monoid b => Monoid (a -> b) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: a -> b Source #mappend :: (a -> b) -> (a -> b) -> a -> b Source #mconcat :: [a -> b] -> a -> b Source # Monoid a => Monoid (Const a b) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Const Methodsmempty :: Const a b Source #mappend :: Const a b -> Const a b -> Const a b Source #mconcat :: [Const a b] -> Const a b Source # (Applicative f, Monoid a) => Monoid (Ap f a) Source # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methodsmempty :: Ap f a Source #mappend :: Ap f a -> Ap f a -> Ap f a Source #mconcat :: [Ap f a] -> Ap f a Source # Alternative f => Monoid (Alt f a) Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsmempty :: Alt f a Source #mappend :: Alt f a -> Alt f a -> Alt f a Source #mconcat :: [Alt f a] -> Alt f a Source # Monoid (f p) => Monoid (Rec1 f p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: Rec1 f p Source #mappend :: Rec1 f p -> Rec1 f p -> Rec1 f p Source #mconcat :: [Rec1 f p] -> Rec1 f p Source # (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b, c) Source #mappend :: (a, b, c) -> (a, b, c) -> (a, b, c) Source #mconcat :: [(a, b, c)] -> (a, b, c) Source # (Monoid (f a), Monoid (g a)) => Monoid (Product f g a) Source # Since: base-4.16.0.0 Instance detailsDefined in Data.Functor.Product Methodsmempty :: Product f g a Source #mappend :: Product f g a -> Product f g a -> Product f g a Source #mconcat :: [Product f g a] -> Product f g a Source # (Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: (f :*: g) p Source #mappend :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p Source #mconcat :: [(f :*: g) p] -> (f :*: g) p Source # Monoid c => Monoid (K1 i c p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: K1 i c p Source #mappend :: K1 i c p -> K1 i c p -> K1 i c p Source #mconcat :: [K1 i c p] -> K1 i c p Source # (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b, c, d) Source #mappend :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #mconcat :: [(a, b, c, d)] -> (a, b, c, d) Source # Monoid (f (g a)) => Monoid (Compose f g a) Source # Since: base-4.16.0.0 Instance detailsDefined in Data.Functor.Compose Methodsmempty :: Compose f g a Source #mappend :: Compose f g a -> Compose f g a -> Compose f g a Source #mconcat :: [Compose f g a] -> Compose f g a Source # Monoid (f (g p)) => Monoid ((f :.: g) p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: (f :.: g) p Source #mappend :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Source #mconcat :: [(f :.: g) p] -> (f :.: g) p Source # Monoid (f p) => Monoid (M1 i c f p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: M1 i c f p Source #mappend :: M1 i c f p -> M1 i c f p -> M1 i c f p Source #mconcat :: [M1 i c f p] -> M1 i c f p Source # (Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e) Source # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b, c, d, e) Source #mappend :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Source #mconcat :: [(a, b, c, d, e)] -> (a, b, c, d, e) Source #

data NonEmpty a Source #

Non-empty (and non-strict) list type.

Since: base-4.9.0.0

Constructors

 a :| [a] infixr 5

#### Instances

Instances details
 Source # Since: base-4.9.0.0 Instance detailsDefined in Control.Monad.Fix Methodsmfix :: (a -> NonEmpty a) -> NonEmpty a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Control.Monad.Zip Methodsmzip :: NonEmpty a -> NonEmpty b -> NonEmpty (a, b) Source #mzipWith :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Source #munzip :: NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Foldable Methodsfold :: Monoid m => NonEmpty m -> m Source #foldMap :: Monoid m => (a -> m) -> NonEmpty a -> m Source #foldMap' :: Monoid m => (a -> m) -> NonEmpty a -> m Source #foldr :: (a -> b -> b) -> b -> NonEmpty a -> b Source #foldr' :: (a -> b -> b) -> b -> NonEmpty a -> b Source #foldl :: (b -> a -> b) -> b -> NonEmpty a -> b Source #foldl' :: (b -> a -> b) -> b -> NonEmpty a -> b Source #foldr1 :: (a -> a -> a) -> NonEmpty a -> a Source #foldl1 :: (a -> a -> a) -> NonEmpty a -> a Source #toList :: NonEmpty a -> [a] Source #null :: NonEmpty a -> Bool Source #length :: NonEmpty a -> Int Source #elem :: Eq a => a -> NonEmpty a -> Bool Source #maximum :: Ord a => NonEmpty a -> a Source #minimum :: Ord a => NonEmpty a -> a Source #sum :: Num a => NonEmpty a -> a Source #product :: Num a => NonEmpty a -> a Source # Source # Instance detailsDefined in Data.Foldable1 Methodsfold1 :: Semigroup m => NonEmpty m -> m Source #foldMap1 :: Semigroup m => (a -> m) -> NonEmpty a -> m Source #foldMap1' :: Semigroup m => (a -> m) -> NonEmpty a -> m Source #maximum :: Ord a => NonEmpty a -> a Source #minimum :: Ord a => NonEmpty a -> a Source #head :: NonEmpty a -> a Source #last :: NonEmpty a -> a Source #foldrMap1 :: (a -> b) -> (a -> b -> b) -> NonEmpty a -> b Source #foldlMap1' :: (a -> b) -> (b -> a -> b) -> NonEmpty a -> b Source #foldlMap1 :: (a -> b) -> (b -> a -> b) -> NonEmpty a -> b Source #foldrMap1' :: (a -> b) -> (a -> b -> b) -> NonEmpty a -> b Source # Source # Since: base-4.10.0.0 Instance detailsDefined in Data.Functor.Classes MethodsliftEq :: (a -> b -> Bool) -> NonEmpty a -> NonEmpty b -> Bool Source # Source # Since: base-4.10.0.0 Instance detailsDefined in Data.Functor.Classes MethodsliftCompare :: (a -> b -> Ordering) -> NonEmpty a -> NonEmpty b -> Ordering Source # Source # Since: base-4.10.0.0 Instance detailsDefined in Data.Functor.Classes MethodsliftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (NonEmpty a) Source #liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [NonEmpty a] Source #liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (NonEmpty a) Source #liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [NonEmpty a] Source # Source # Since: base-4.10.0.0 Instance detailsDefined in Data.Functor.Classes MethodsliftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> NonEmpty a -> ShowS Source #liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [NonEmpty a] -> ShowS Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Traversable Methodstraverse :: Applicative f => (a -> f b) -> NonEmpty a -> f (NonEmpty b) Source #sequenceA :: Applicative f => NonEmpty (f a) -> f (NonEmpty a) Source #mapM :: Monad m => (a -> m b) -> NonEmpty a -> m (NonEmpty b) Source #sequence :: Monad m => NonEmpty (m a) -> m (NonEmpty a) Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodspure :: a -> NonEmpty a Source #(<*>) :: NonEmpty (a -> b) -> NonEmpty a -> NonEmpty b Source #liftA2 :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Source #(*>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Source #(<*) :: NonEmpty a -> NonEmpty b -> NonEmpty a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> NonEmpty a -> NonEmpty b Source #(<$) :: a -> NonEmpty b -> NonEmpty a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(>>=) :: NonEmpty a -> (a -> NonEmpty b) -> NonEmpty b Source #(>>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Source #return :: a -> NonEmpty a Source # Source # Instance detailsDefined in GHC.Generics Associated Typestype Rep1 NonEmpty :: k -> Type Source # Methodsfrom1 :: forall (a :: k). NonEmpty a -> Rep1 NonEmpty a Source #to1 :: forall (a :: k). Rep1 NonEmpty a -> NonEmpty a Source # Data a => Data (NonEmpty a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NonEmpty a -> c (NonEmpty a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NonEmpty a) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NonEmpty a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NonEmpty a)) Source #gmapT :: (forall b. Data b => b -> b) -> NonEmpty a -> NonEmpty a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> NonEmpty a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> NonEmpty a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: NonEmpty a -> NonEmpty a -> NonEmpty a Source #stimes :: Integral b => b -> NonEmpty a -> NonEmpty a Source # Source # Instance detailsDefined in GHC.Generics Associated Typestype Rep (NonEmpty a) :: Type -> Type Source # Methodsfrom :: NonEmpty a -> Rep (NonEmpty a) x Source #to :: Rep (NonEmpty a) x -> NonEmpty a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.IsList Associated Typestype Item (NonEmpty a) Source # MethodsfromList :: [Item (NonEmpty a)] -> NonEmpty a Source #fromListN :: Int -> [Item (NonEmpty a)] -> NonEmpty a Source #toList :: NonEmpty a -> [Item (NonEmpty a)] Source # Read a => Read (NonEmpty a) Source # Since: base-4.11.0.0 Instance detailsDefined in GHC.Read Methods Show a => Show (NonEmpty a) Source # Since: base-4.11.0.0 Instance detailsDefined in GHC.Show MethodsshowsPrec :: Int -> NonEmpty a -> ShowS Source #showList :: [NonEmpty a] -> ShowS Source # Eq a => Eq (NonEmpty a) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(==) :: NonEmpty a -> NonEmpty a -> Bool Source #(/=) :: NonEmpty a -> NonEmpty a -> Bool Source # Ord a => Ord (NonEmpty a) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodscompare :: NonEmpty a -> NonEmpty a -> Ordering Source #(<) :: NonEmpty a -> NonEmpty a -> Bool Source #(<=) :: NonEmpty a -> NonEmpty a -> Bool Source #(>) :: NonEmpty a -> NonEmpty a -> Bool Source #(>=) :: NonEmpty a -> NonEmpty a -> Bool Source #max :: NonEmpty a -> NonEmpty a -> NonEmpty a Source #min :: NonEmpty a -> NonEmpty a -> NonEmpty a Source # type Rep1 NonEmpty Source # Since: base-4.6.0.0 Instance detailsDefined in GHC.Generics type Rep1 NonEmpty = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 List))) type Rep (NonEmpty a) Source # Since: base-4.6.0.0 Instance detailsDefined in GHC.Generics type Rep (NonEmpty a) = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a]))) type Item (NonEmpty a) Source # Instance detailsDefined in GHC.IsList type Item (NonEmpty a) = a class Semigroup a where Source # The class of semigroups (types with an associative binary operation). Instances should satisfy the following: Associativity x <> (y <> z) = (x <> y) <> z You can alternatively define sconcat instead of (<>), in which case the laws are: Unit sconcat (pure x) = x Multiplication sconcat (join xss) = sconcat (fmap sconcat xss) Since: base-4.9.0.0 Minimal complete definition Methods (<>) :: a -> a -> a infixr 6 Source # An associative operation. >>> [1,2,3] <> [4,5,6] [1,2,3,4,5,6]  sconcat :: NonEmpty a -> a Source # Reduce a non-empty list with <> The default definition should be sufficient, but this can be overridden for efficiency. >>> import Data.List.NonEmpty (NonEmpty (..)) >>> sconcat$ "Hello" :| [" ", "Haskell", "!"]
"Hello Haskell!"


stimes :: Integral b => b -> a -> a Source #

Repeat a value n times.

Given that this works on a Semigroup it is allowed to fail if you request 0 or fewer repetitions, and the default definition will do so.

By making this a member of the class, idempotent semigroups and monoids can upgrade this to execute in $$\mathcal{O}(1)$$ by picking stimes = stimesIdempotent or stimes = stimesIdempotentMonoid respectively.

>>> stimes 4 [1]
[1,1,1,1]


#### Instances

Instances details
 Source # Since: base-4.17.0.0 Instance detailsDefined in Data.Array.Byte Methodsstimes :: Integral b => b -> ByteArray -> ByteArray Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: All -> All -> All Source #stimes :: Integral b => b -> All -> All Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Any -> Any -> Any Source #stimes :: Integral b => b -> Any -> Any Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: Void -> Void -> Void Source #stimes :: Integral b => b -> Void -> Void Source # Source # Since: base-4.10.0.0 Instance detailsDefined in GHC.Event.Internal.Types Methodsstimes :: Integral b => b -> Event -> Event Source # Source # Since: base-4.10.0.0 Instance detailsDefined in GHC.Event.Internal.Types Methodsstimes :: Integral b => b -> Lifetime -> Lifetime Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsstimes :: Integral b => b -> Ordering -> Ordering Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: () -> () -> () Source #sconcat :: NonEmpty () -> () Source #stimes :: Integral b => b -> () -> () Source # Bits a => Semigroup (And a) Source # Since: base-4.16 Instance detailsDefined in Data.Bits Methods(<>) :: And a -> And a -> And a Source #sconcat :: NonEmpty (And a) -> And a Source #stimes :: Integral b => b -> And a -> And a Source # FiniteBits a => Semigroup (Iff a) Source # This constraint is arguably too strong. However, as some types (such as Natural) have undefined complement, this is the only safe choice.Since: base-4.16 Instance detailsDefined in Data.Bits Methods(<>) :: Iff a -> Iff a -> Iff a Source #sconcat :: NonEmpty (Iff a) -> Iff a Source #stimes :: Integral b => b -> Iff a -> Iff a Source # Bits a => Semigroup (Ior a) Source # Since: base-4.16 Instance detailsDefined in Data.Bits Methods(<>) :: Ior a -> Ior a -> Ior a Source #sconcat :: NonEmpty (Ior a) -> Ior a Source #stimes :: Integral b => b -> Ior a -> Ior a Source # Bits a => Semigroup (Xor a) Source # Since: base-4.16 Instance detailsDefined in Data.Bits Methods(<>) :: Xor a -> Xor a -> Xor a Source #sconcat :: NonEmpty (Xor a) -> Xor a Source #stimes :: Integral b => b -> Xor a -> Xor a Source # Source # (<>) on comparisons combines results with (<>) @Ordering. Without newtypes this equals liftA2 (liftA2 (<>)).(<>) :: Comparison a -> Comparison a -> Comparison a Comparison cmp <> Comparison cmp' = Comparison a a' -> cmp a a' <> cmp a a'  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Comparison a -> Comparison a -> Comparison a Source #stimes :: Integral b => b -> Comparison a -> Comparison a Source # Source # (<>) on equivalences uses logical conjunction (&&) on the results. Without newtypes this equals liftA2 (liftA2 (&&)).(<>) :: Equivalence a -> Equivalence a -> Equivalence a Equivalence equiv <> Equivalence equiv' = Equivalence a b -> equiv a b && equiv' a b  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Equivalence a -> Equivalence a -> Equivalence a Source #stimes :: Integral b => b -> Equivalence a -> Equivalence a Source # Source # (<>) on predicates uses logical conjunction (&&) on the results. Without newtypes this equals liftA2 (&&).(<>) :: Predicate a -> Predicate a -> Predicate a Predicate pred <> Predicate pred' = Predicate a -> pred a && pred' a  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Predicate a -> Predicate a -> Predicate a Source #stimes :: Integral b => b -> Predicate a -> Predicate a Source # Semigroup a => Semigroup (Identity a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Identity Methods(<>) :: Identity a -> Identity a -> Identity a Source #stimes :: Integral b => b -> Identity a -> Identity a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Monoid Methods(<>) :: First a -> First a -> First a Source #sconcat :: NonEmpty (First a) -> First a Source #stimes :: Integral b => b -> First a -> First a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Monoid Methods(<>) :: Last a -> Last a -> Last a Source #sconcat :: NonEmpty (Last a) -> Last a Source #stimes :: Integral b => b -> Last a -> Last a Source # Semigroup a => Semigroup (Down a) Source # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methods(<>) :: Down a -> Down a -> Down a Source #sconcat :: NonEmpty (Down a) -> Down a Source #stimes :: Integral b => b -> Down a -> Down a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: First a -> First a -> First a Source #sconcat :: NonEmpty (First a) -> First a Source #stimes :: Integral b => b -> First a -> First a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Last a -> Last a -> Last a Source #sconcat :: NonEmpty (Last a) -> Last a Source #stimes :: Integral b => b -> Last a -> Last a Source # Ord a => Semigroup (Max a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Max a -> Max a -> Max a Source #sconcat :: NonEmpty (Max a) -> Max a Source #stimes :: Integral b => b -> Max a -> Max a Source # Ord a => Semigroup (Min a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Min a -> Min a -> Min a Source #sconcat :: NonEmpty (Min a) -> Min a Source #stimes :: Integral b => b -> Min a -> Min a Source # Monoid m => Semigroup (WrappedMonoid m) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsstimes :: Integral b => b -> WrappedMonoid m -> WrappedMonoid m Source # Semigroup a => Semigroup (Dual a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Dual a -> Dual a -> Dual a Source #sconcat :: NonEmpty (Dual a) -> Dual a Source #stimes :: Integral b => b -> Dual a -> Dual a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Endo a -> Endo a -> Endo a Source #sconcat :: NonEmpty (Endo a) -> Endo a Source #stimes :: Integral b => b -> Endo a -> Endo a Source # Num a => Semigroup (Product a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Product a -> Product a -> Product a Source #sconcat :: NonEmpty (Product a) -> Product a Source #stimes :: Integral b => b -> Product a -> Product a Source # Num a => Semigroup (Sum a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Sum a -> Sum a -> Sum a Source #sconcat :: NonEmpty (Sum a) -> Sum a Source #stimes :: Integral b => b -> Sum a -> Sum a Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: NonEmpty a -> NonEmpty a -> NonEmpty a Source #stimes :: Integral b => b -> NonEmpty a -> NonEmpty a Source # Semigroup a => Semigroup (STM a) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Conc.Sync Methods(<>) :: STM a -> STM a -> STM a Source #sconcat :: NonEmpty (STM a) -> STM a Source #stimes :: Integral b => b -> STM a -> STM a Source # (Generic a, Semigroup (Rep a ())) => Semigroup (Generically a) Source # Since: base-4.17.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: Generically a -> Generically a -> Generically a Source #stimes :: Integral b => b -> Generically a -> Generically a Source # Semigroup p => Semigroup (Par1 p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: Par1 p -> Par1 p -> Par1 p Source #sconcat :: NonEmpty (Par1 p) -> Par1 p Source #stimes :: Integral b => b -> Par1 p -> Par1 p Source # Semigroup a => Semigroup (IO a) Source # Since: base-4.10.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: IO a -> IO a -> IO a Source #sconcat :: NonEmpty (IO a) -> IO a Source #stimes :: Integral b => b -> IO a -> IO a Source # Semigroup a => Semigroup (Maybe a) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: Maybe a -> Maybe a -> Maybe a Source #sconcat :: NonEmpty (Maybe a) -> Maybe a Source #stimes :: Integral b => b -> Maybe a -> Maybe a Source # Semigroup a => Semigroup (a) Source # Since: base-4.15 Instance detailsDefined in GHC.Base Methods(<>) :: (a) -> (a) -> (a) Source #sconcat :: NonEmpty (a) -> (a) Source #stimes :: Integral b => b -> (a) -> (a) Source # Semigroup [a] Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: [a] -> [a] -> [a] Source #sconcat :: NonEmpty [a] -> [a] Source #stimes :: Integral b => b -> [a] -> [a] Source # Semigroup (Either a b) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Either Methods(<>) :: Either a b -> Either a b -> Either a b Source #sconcat :: NonEmpty (Either a b) -> Either a b Source #stimes :: Integral b0 => b0 -> Either a b -> Either a b Source # Semigroup a => Semigroup (Op a b) Source # (<>) @(Op a b) without newtypes is (<>) @(b->a) = liftA2 (<>). This lifts the Semigroup operation (<>) over the output of a.(<>) :: Op a b -> Op a b -> Op a b Op f <> Op g = Op a -> f a <> g a  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Op a b -> Op a b -> Op a b Source #sconcat :: NonEmpty (Op a b) -> Op a b Source #stimes :: Integral b0 => b0 -> Op a b -> Op a b Source # Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Proxy Methods(<>) :: Proxy s -> Proxy s -> Proxy s Source #sconcat :: NonEmpty (Proxy s) -> Proxy s Source #stimes :: Integral b => b -> Proxy s -> Proxy s Source # Semigroup (U1 p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: U1 p -> U1 p -> U1 p Source #sconcat :: NonEmpty (U1 p) -> U1 p Source #stimes :: Integral b => b -> U1 p -> U1 p Source # Semigroup (V1 p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: V1 p -> V1 p -> V1 p Source #sconcat :: NonEmpty (V1 p) -> V1 p Source #stimes :: Integral b => b -> V1 p -> V1 p Source # Semigroup a => Semigroup (ST s a) Source # Since: base-4.11.0.0 Instance detailsDefined in GHC.ST Methods(<>) :: ST s a -> ST s a -> ST s a Source #sconcat :: NonEmpty (ST s a) -> ST s a Source #stimes :: Integral b => b -> ST s a -> ST s a Source # (Semigroup a, Semigroup b) => Semigroup (a, b) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b) -> (a, b) -> (a, b) Source #sconcat :: NonEmpty (a, b) -> (a, b) Source #stimes :: Integral b0 => b0 -> (a, b) -> (a, b) Source # Semigroup b => Semigroup (a -> b) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a -> b) -> (a -> b) -> a -> b Source #sconcat :: NonEmpty (a -> b) -> a -> b Source #stimes :: Integral b0 => b0 -> (a -> b) -> a -> b Source # Semigroup a => Semigroup (Const a b) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Const Methods(<>) :: Const a b -> Const a b -> Const a b Source #sconcat :: NonEmpty (Const a b) -> Const a b Source #stimes :: Integral b0 => b0 -> Const a b -> Const a b Source # (Applicative f, Semigroup a) => Semigroup (Ap f a) Source # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methods(<>) :: Ap f a -> Ap f a -> Ap f a Source #sconcat :: NonEmpty (Ap f a) -> Ap f a Source #stimes :: Integral b => b -> Ap f a -> Ap f a Source # Alternative f => Semigroup (Alt f a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Alt f a -> Alt f a -> Alt f a Source #sconcat :: NonEmpty (Alt f a) -> Alt f a Source #stimes :: Integral b => b -> Alt f a -> Alt f a Source # Semigroup (f p) => Semigroup (Rec1 f p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: Rec1 f p -> Rec1 f p -> Rec1 f p Source #sconcat :: NonEmpty (Rec1 f p) -> Rec1 f p Source #stimes :: Integral b => b -> Rec1 f p -> Rec1 f p Source # (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b, c) -> (a, b, c) -> (a, b, c) Source #sconcat :: NonEmpty (a, b, c) -> (a, b, c) Source #stimes :: Integral b0 => b0 -> (a, b, c) -> (a, b, c) Source # (Semigroup (f a), Semigroup (g a)) => Semigroup (Product f g a) Source # Since: base-4.16.0.0 Instance detailsDefined in Data.Functor.Product Methods(<>) :: Product f g a -> Product f g a -> Product f g a Source #sconcat :: NonEmpty (Product f g a) -> Product f g a Source #stimes :: Integral b => b -> Product f g a -> Product f g a Source # (Semigroup (f p), Semigroup (g p)) => Semigroup ((f :*: g) p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p Source #sconcat :: NonEmpty ((f :*: g) p) -> (f :*: g) p Source #stimes :: Integral b => b -> (f :*: g) p -> (f :*: g) p Source # Semigroup c => Semigroup (K1 i c p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: K1 i c p -> K1 i c p -> K1 i c p Source #sconcat :: NonEmpty (K1 i c p) -> K1 i c p Source #stimes :: Integral b => b -> K1 i c p -> K1 i c p Source # (Semigroup a, Semigroup b, Semigroup c, Semigroup d) => Semigroup (a, b, c, d) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #sconcat :: NonEmpty (a, b, c, d) -> (a, b, c, d) Source #stimes :: Integral b0 => b0 -> (a, b, c, d) -> (a, b, c, d) Source # Semigroup (f (g a)) => Semigroup (Compose f g a) Source # Since: base-4.16.0.0 Instance detailsDefined in Data.Functor.Compose Methods(<>) :: Compose f g a -> Compose f g a -> Compose f g a Source #sconcat :: NonEmpty (Compose f g a) -> Compose f g a Source #stimes :: Integral b => b -> Compose f g a -> Compose f g a Source # Semigroup (f (g p)) => Semigroup ((f :.: g) p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Source #sconcat :: NonEmpty ((f :.: g) p) -> (f :.: g) p Source #stimes :: Integral b => b -> (f :.: g) p -> (f :.: g) p Source # Semigroup (f p) => Semigroup (M1 i c f p) Source # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: M1 i c f p -> M1 i c f p -> M1 i c f p Source #sconcat :: NonEmpty (M1 i c f p) -> M1 i c f p Source #stimes :: Integral b => b -> M1 i c f p -> M1 i c f p Source # (Semigroup a, Semigroup b, Semigroup c, Semigroup d, Semigroup e) => Semigroup (a, b, c, d, e) Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Source #sconcat :: NonEmpty (a, b, c, d, e) -> (a, b, c, d, e) Source #stimes :: Integral b0 => b0 -> (a, b, c, d, e) -> (a, b, c, d, e) Source #

data Void Source #

Uninhabited data type

Since: base-4.8.0.0

#### Instances

Instances details
 Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Void -> c Void Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Void Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Void) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Void) Source #gmapT :: (forall b. Data b => b -> b) -> Void -> Void Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Void -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Void -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Void -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Void -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Void -> m Void Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Void -> m Void Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Void -> m Void Source # Source # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: Void -> Void -> Void Source #stimes :: Integral b => b -> Void -> Void Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Exception.Type Methods Source # Instance detailsDefined in GHC.Generics Associated Typestype Rep Void :: Type -> Type Source # Methodsto :: Rep Void x -> Void Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Ix Methodsrange :: (Void, Void) -> [Void] Source #index :: (Void, Void) -> Void -> Int Source #unsafeIndex :: (Void, Void) -> Void -> Int Source #inRange :: (Void, Void) -> Void -> Bool Source #rangeSize :: (Void, Void) -> Int Source #unsafeRangeSize :: (Void, Void) -> Int Source # Source # Reading a Void value is always a parse error, considering Void as a data type with no constructors.Since: base-4.8.0.0 Instance detailsDefined in GHC.Read Methods Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Show MethodsshowList :: [Void] -> ShowS Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Base Methods(==) :: Void -> Void -> Bool Source #(/=) :: Void -> Void -> Bool Source # Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Base Methods(<) :: Void -> Void -> Bool Source #(<=) :: Void -> Void -> Bool Source #(>) :: Void -> Void -> Bool Source #(>=) :: Void -> Void -> Bool Source #max :: Void -> Void -> Void Source #min :: Void -> Void -> Void Source # type Rep Void Source # Since: base-4.8.0.0 Instance detailsDefined in GHC.Generics type Rep Void = D1 ('MetaData "Void" "GHC.Base" "base" 'False) (V1 :: Type -> Type)

data Opaque Source #

Constructors

 forall a. O a

The fromEnum method restricted to the type Char.

(.) :: (b -> c) -> (a -> b) -> a -> c infixr 9 Source #

Function composition.

(<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 Source #

A variant of <*> with the arguments reversed.

liftA :: Applicative f => (a -> b) -> f a -> f b Source #

Lift a function to actions. Equivalent to Functor's fmap but implemented using only Applicative's methods: liftA f a = pure f <*> a

As such this function may be used to implement a Functor instance from an Applicative one.

#### Examples

Expand

Using the Applicative instance for Lists:

>>> liftA (+1) [1, 2]
[2,3]


Or the Applicative instance for Maybe

>>> liftA (+1) (Just 3)
Just 4


liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d Source #

Lift a ternary function to actions.

id :: a -> a Source #

Identity function.

id x = x

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

Conditional execution of Applicative expressions. For example,

when debug (putStrLn "Debugging")

will output the string Debugging if the Boolean value debug is True, and otherwise do nothing.

assert :: Bool -> a -> a Source #

If the first argument evaluates to True, then the result is the second argument. Otherwise an AssertionFailed exception is raised, containing a String with the source file and line number of the call to assert.

Assertions can normally be turned on or off with a compiler flag (for GHC, assertions are normally on unless optimisation is turned on with -O or the -fignore-asserts option is given). When assertions are turned off, the first argument to assert is ignored, and the second argument is returned as the result.

mapM :: Monad m => (a -> m b) -> [a] -> m [b] Source #

mapM f is equivalent to sequence . map f.

sequence :: Monad m => [m a] -> m [a] Source #

Evaluate each action in the sequence from left to right, and collect the results.

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

Same as >>=, but with the arguments interchanged.

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

The join function is the conventional monad join operator. It is used to remove one level of monadic structure, projecting its bound argument into the outer level.

'join bss' can be understood as the do expression

do bs <- bss
bs


#### Examples

Expand

A common use of join is to run an IO computation returned from an STM transaction, since STM transactions can't perform IO directly. Recall that

atomically :: STM a -> IO a


is used to run STM transactions atomically. So, by specializing the types of atomically and join to

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


we can compose them as

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


to run an STM transaction and the IO action it returns.

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

Promote a function to a monad.

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

Promote a function to a monad, scanning the monadic arguments from left to right. For example,

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 #

Promote a function to a monad, scanning the monadic arguments from left to right (cf. liftM2).

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

Promote a function to a monad, scanning the monadic arguments from left to right (cf. liftM2).

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

Promote a function to a monad, scanning the monadic arguments from left to right (cf. liftM2).

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

In many situations, the liftM operations can be replaced by uses of ap, which promotes function application.

return f ap x1 ap ... ap xn

is equivalent to

liftMn f x1 x2 ... xn

($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0 Source # Application operator. This operator is redundant, since ordinary application (f x) means the same as (f$ x). However, $ has low, right-associative binding precedence, so it sometimes allows parentheses to be omitted; for example: f$ g $h x = f (g (h x)) It is also useful in higher-order situations, such as map ($ 0) xs, or zipWith ($) fs xs. Note that ($) is representation-polymorphic in its result type, so that foo $True where foo :: Bool -> Int# is well-typed. otherwise is defined as the value True. It helps to make guards more readable. eg.  f x | x < 0 = ... | otherwise = ... foldr :: (a -> b -> b) -> b -> [a] -> b Source # foldr, applied to a binary operator, a starting value (typically the right-identity of the operator), and a list, reduces the list using the binary operator, from right to left: foldr f z [x1, x2, ..., xn] == x1 f (x2 f ... (xn f z)...) ($!) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0 Source #

Strict (call-by-value) application operator. It takes a function and an argument, evaluates the argument to weak head normal form (WHNF), then calls the function with that value.

flip :: (a -> b -> c) -> b -> a -> c Source #

flip f takes its (first) two arguments in the reverse order of f.

>>> flip (++) "hello" "world"
"worldhello"


const :: a -> b -> a Source #

const x y always evaluates to x, ignoring its second argument.

>>> const 42 "hello"
42

>>> map (const 42) [0..3]
[42,42,42,42]


(++) :: [a] -> [a] -> [a] infixr 5 Source #

Append two lists, i.e.,

[x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn]
[x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...]

If the first list is not finite, the result is the first list.

WARNING: This function takes linear time in the number of elements of the first list.

map :: (a -> b) -> [a] -> [b] Source #

$$\mathcal{O}(n)$$. map f xs is the list obtained by applying f to each element of xs, i.e.,

map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]
map f [x1, x2, ...] == [f x1, f x2, ...]
>>> map (+1) [1, 2, 3]
[2,3,4]


absurd :: Void -> a Source #

Since Void values logically don't exist, this witnesses the logical reasoning tool of "ex falso quodlibet".

>>> let x :: Either Void Int; x = Right 5
>>> :{
case x of
Right r -> r
Left l  -> absurd l
:}
5


Since: base-4.8.0.0

vacuous :: Functor f => f Void -> f a Source #

If Void is uninhabited then any Functor that holds only values of type Void is holding no values. It is implemented in terms of fmap absurd.

Since: base-4.8.0.0

Shift the argument left by the specified number of bits (which must be non-negative).

Shift the argument right by the specified number of bits (which must be non-negative). The RL means "right, logical" (as opposed to RA for arithmetic) (although an arithmetic right shift wouldn't make sense for Word#)

Shift the argument left by the specified number of bits (which must be non-negative).

Shift the argument right (signed) by the specified number of bits (which must be non-negative). The RA means "right, arithmetic" (as opposed to RL for logical)

Shift the argument right (unsigned) by the specified number of bits (which must be non-negative). The RL means "right, logical" (as opposed to RA for arithmetic)

build :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a] Source #

A list producer that can be fused with foldr. This function is merely

   build g = g (:) []

but GHC's simplifier will transform an expression of the form foldr k z (build g), which may arise after inlining, to g k z, which avoids producing an intermediate list.

augment :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a] -> [a] Source #

A list producer that can be fused with foldr. This function is merely

   augment g xs = g (:) xs

but GHC's simplifier will transform an expression of the form foldr k z (augment g xs), which may arise after inlining, to g k (foldr k z xs), which avoids producing an intermediate list.

breakpoint :: a -> a Source #

until :: (a -> Bool) -> (a -> a) -> a -> a Source #

until p f yields the result of applying f until p holds.

asTypeOf :: a -> a -> a Source #

asTypeOf is a type-restricted version of const. It is usually used as an infix operator, and its typing forces its first argument (which is usually overloaded) to have the same type as the second.

This String equality predicate is used when desugaring pattern-matches against strings.

returnIO :: a -> IO a Source #

bindIO :: IO a -> (a -> IO b) -> IO b Source #

thenIO :: IO a -> IO b -> IO b Source #

mapFB :: (elt -> lst -> lst) -> (a -> elt) -> a -> lst -> lst Source #

getTag :: a -> Int# Source #

Returns the tag of a constructor application; this function is used by the deriving code for Eq, Ord and Enum.

quotInt :: Int -> Int -> Int Source #

Used to implement quot for the Integral typeclass. This performs integer division on its two parameters, truncated towards zero.

#### Example

Expand
>>> quotInt 10 2
5

>>> quot 10 2
5


remInt :: Int -> Int -> Int Source #

Used to implement rem for the Integral typeclass. This gives the remainder after integer division of its two parameters, satisfying

((x quot y) * y) + (x rem y) == x

#### Example

Expand
>>> remInt 3 2
1

>>> rem 3 2
1


divInt :: Int -> Int -> Int Source #

Used to implement div for the Integral typeclass. This performs integer division on its two parameters, truncated towards negative infinity.

#### Example

Expand
>>> 10 divInt 2
5

>>> 10 div 2
5


modInt :: Int -> Int -> Int Source #

Used to implement mod for the Integral typeclass. This performs the modulo operation, satisfying

((x div y) * y) + (x mod y) == x

#### Example

Expand
>>> 7 modInt 3
1

>>> 7 mod 3
1


quotRemInt :: Int -> Int -> (Int, Int) Source #

Used to implement quotRem for the Integral typeclass. This gives a tuple equivalent to

(quot x y, mod x y)

#### Example

Expand
>>> quotRemInt 10 2
(5,0)

>>> quotRem 10 2
(5,0)


divModInt :: Int -> Int -> (Int, Int) Source #

Used to implement divMod for the Integral typeclass. This gives a tuple equivalent to

(div x y, mod x y)

#### Example

Expand
>>> divModInt 10 2
(5,0)

>>> divMod 10 2
(5,0)


This function is used to implement branchless shifts. If the number of bits to shift is greater than or equal to the type size in bits, then the shift must return 0. Instead of doing a test, we use a mask obtained via this function which is branchless too.

shift_mask m b | b < m = 0xFF..FF | otherwise = 0

module GHC.Magic

module GHC.Types

module GHC.Prim

module GHC.Err

module GHC.Maybe