On this page
GHC.Base
Copyright | (c) The University of Glasgow 1992-2002 |
---|---|
License | see libraries/base/LICENSE |
Maintainer | cvs-ghc@haskell.org |
Stability | internal |
Portability | non-portable (GHC extensions) |
Safe Haskell | Unsafe |
Language | Haskell2010 |
Description
Basic data types and classes.
Non-empty (and non-strict) list type.
Since: base-4.9.0.0
Constructors
a :| [a] infixr 5 |
Instances
MonadFix NonEmpty Source | Since: base-4.9.0.0 |
Defined in Control.Monad.Fix |
|
MonadZip NonEmpty Source | Since: base-4.9.0.0 |
Foldable NonEmpty Source | Since: base-4.9.0.0 |
Defined 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 |
|
Eq1 NonEmpty Source | Since: base-4.10.0.0 |
Ord1 NonEmpty Source | Since: base-4.10.0.0 |
Defined in Data.Functor.Classes |
|
Read1 NonEmpty Source | Since: base-4.10.0.0 |
Defined 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 |
|
Show1 NonEmpty Source | Since: base-4.10.0.0 |
Traversable NonEmpty Source | Since: base-4.9.0.0 |
Defined in Data.Traversable |
|
Applicative NonEmpty Source | Since: base-4.9.0.0 |
Defined in GHC.Base |
|
Functor NonEmpty Source | Since: base-4.9.0.0 |
Monad NonEmpty Source | Since: base-4.9.0.0 |
Generic1 NonEmpty Source | |
Data a => Data (NonEmpty a) Source | Since: base-4.9.0.0 |
Defined 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 toConstr :: NonEmpty a -> Constr Source dataTypeOf :: NonEmpty a -> DataType 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 |
|
Semigroup (NonEmpty a) Source | Since: base-4.9.0.0 |
Generic (NonEmpty a) Source | |
IsList (NonEmpty a) Source | Since: base-4.9.0.0 |
Read a => Read (NonEmpty a) Source | Since: base-4.11.0.0 |
Show a => Show (NonEmpty a) Source | Since: base-4.11.0.0 |
Eq a => Eq (NonEmpty a) Source | Since: base-4.9.0.0 |
Ord a => Ord (NonEmpty a) Source | Since: base-4.9.0.0 |
Defined 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 |
|
type Rep1 NonEmpty Source | Since: base-4.6.0.0 |
Defined 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 [])))
|
|
type Rep (NonEmpty a) Source | Since: base-4.6.0.0 |
Defined 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 | |
Defined in GHC.IsList |
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:
The above laws imply:
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
Inject a value into the monadic type.
Instances
Monad Complex Source | Since: base-4.9.0.0 |
Monad Identity Source | Since: base-4.8.0.0 |
Monad First Source | Since: base-4.8.0.0 |
Monad Last Source | Since: base-4.8.0.0 |
Monad Down Source | Since: base-4.11.0.0 |
Monad First Source | Since: base-4.9.0.0 |
Monad Last Source | Since: base-4.9.0.0 |
Monad Max Source | Since: base-4.9.0.0 |
Monad Min Source | Since: base-4.9.0.0 |
Monad Dual Source | Since: base-4.8.0.0 |
Monad Product Source | Since: base-4.8.0.0 |
Monad Sum Source | Since: base-4.8.0.0 |
Monad STM Source | Since: base-4.3.0.0 |
Monad NoIO Source | Since: base-4.4.0.0 |
Monad Par1 Source | Since: base-4.9.0.0 |
Monad ReadP Source | Since: base-2.1 |
Monad ReadPrec Source | Since: base-2.1 |
Monad IO Source | Since: base-2.1 |
Monad NonEmpty Source | Since: base-4.9.0.0 |
Monad Maybe Source | Since: base-2.1 |
Monad Solo Source | Since: base-4.15 |
Monad [] Source | Since: base-2.1 |
Monad m => Monad (WrappedMonad m) Source | Since: base-4.7.0.0 |
Defined in Control.Applicative Methods(>>=) :: WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b Source (>>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Source return :: a -> WrappedMonad m a Source |
|
ArrowApply a => Monad (ArrowMonad a) Source | Since: base-2.1 |
Defined in Control.Arrow Methods(>>=) :: ArrowMonad a a0 -> (a0 -> ArrowMonad a b) -> ArrowMonad a b Source (>>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Source return :: a0 -> ArrowMonad a a0 Source |
|
Monad (ST s) Source | Since: base-2.1 |
Monad (Either e) Source | Since: base-4.4.0.0 |
Monad (Proxy :: Type -> Type) Source | Since: base-4.7.0.0 |
Monad (U1 :: Type -> Type) Source | Since: base-4.9.0.0 |
Monad (ST s) Source | Since: base-2.1 |
Monoid a => Monad ((,) a) Source | Since: base-4.9.0.0 |
Monad m => Monad (Kleisli m a) Source | Since: base-4.14.0.0 |
Monad f => Monad (Ap f) Source | Since: base-4.12.0.0 |
Monad f => Monad (Alt f) Source | Since: base-4.8.0.0 |
Monad f => Monad (Rec1 f) Source | Since: base-4.9.0.0 |
(Monoid a, Monoid b) => Monad ((,,) a b) Source | Since: base-4.14.0.0 |
(Monad f, Monad g) => Monad (Product f g) Source | Since: base-4.9.0.0 |
(Monad f, Monad g) => Monad (f :*: g) Source | Since: base-4.9.0.0 |
(Monoid a, Monoid b, Monoid c) => Monad ((,,,) a b c) Source | Since: base-4.14.0.0 |
Monad ((->) r) Source | Since: base-2.1 |
Monad f => Monad (M1 i c f) Source | Since: base-4.9.0.0 |
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 (
<*>
andliftA2
).
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:
As a consequence of these laws, the Functor
instance for f
will satisfy
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
(which implies that pure
and <*>
satisfy the applicative functor laws).
Methods
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
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
>>> 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
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
Applicative ZipList Source | where Since: base-2.1 |
Applicative Complex Source | Since: base-4.9.0.0 |
Applicative Identity Source | Since: base-4.8.0.0 |
Defined in Data.Functor.Identity |
|
Applicative First Source | Since: base-4.8.0.0 |
Applicative Last Source | Since: base-4.8.0.0 |
Applicative Down Source | Since: base-4.11.0.0 |
Applicative First Source | Since: base-4.9.0.0 |
Applicative Last Source | Since: base-4.9.0.0 |
Applicative Max Source | Since: base-4.9.0.0 |
Applicative Min Source | Since: base-4.9.0.0 |
Applicative Dual Source | Since: base-4.8.0.0 |
Applicative Product Source | Since: base-4.8.0.0 |
Defined in Data.Semigroup.Internal |
|
Applicative Sum Source | Since: base-4.8.0.0 |
Applicative STM Source | Since: base-4.8.0.0 |
Applicative NoIO Source | Since: base-4.8.0.0 |
Applicative Par1 Source | Since: base-4.9.0.0 |
Applicative ReadP Source | Since: base-4.6.0.0 |
Applicative ReadPrec Source | Since: base-4.6.0.0 |
Defined in Text.ParserCombinators.ReadPrec |
|
Applicative IO Source | Since: base-2.1 |
Applicative NonEmpty Source | Since: base-4.9.0.0 |
Defined in GHC.Base |
|
Applicative Maybe Source | Since: base-2.1 |
Applicative Solo Source | Since: base-4.15 |
Applicative [] Source | Since: base-2.1 |
Monad m => Applicative (WrappedMonad m) Source | Since: base-2.1 |
Defined 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 |
Defined 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 |
|
Applicative (ST s) Source | Since: base-2.1 |
Applicative (Either e) Source | Since: base-3.0 |
Defined in Data.Either |
|
Applicative (Proxy :: Type -> Type) Source | Since: base-4.7.0.0 |
Applicative (U1 :: Type -> Type) Source | Since: base-4.9.0.0 |
Applicative (ST s) Source | Since: base-4.4.0.0 |
Monoid a => Applicative ((,) a) Source | For tuples, the Since: base-2.1 |
Arrow a => Applicative (WrappedArrow a b) Source | Since: base-2.1 |
Defined 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 |
Defined 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 |
Applicative f => Applicative (Ap f) Source | Since: base-4.12.0.0 |
Applicative f => Applicative (Alt f) Source | Since: base-4.8.0.0 |
(Generic1 f, Applicative (Rep1 f)) => Applicative (Generically1 f) Source | Since: base-4.17.0.0 |
Defined 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 |
(Monoid a, Monoid b) => Applicative ((,,) a b) Source | Since: base-4.14.0.0 |
Defined in GHC.Base |
|
(Applicative f, Applicative g) => Applicative (Product f g) Source | Since: base-4.9.0.0 |
Defined 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 |
Defined in GHC.Generics |
|
Monoid c => Applicative (K1 i c :: Type -> Type) Source | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c) => Applicative ((,,,) a b c) Source | Since: base-4.14.0.0 |
Defined 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 |
(Applicative f, Applicative g) => Applicative (Compose f g) Source | Since: base-4.9.0.0 |
Defined 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 |
Defined in GHC.Generics |
|
Applicative f => Applicative (M1 i c f) Source | Since: base-4.9.0.0 |
Defined in GHC.Generics |
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:
Methods
The identity of <|>
(<|>) :: f a -> f a -> f a infixl 3 Source
An associative binary operation
One or more.
Zero or more.
Instances
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:
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
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
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.
Instances
Functor ZipList Source | Since: base-2.1 |
Functor Handler Source | Since: base-4.6.0.0 |
Functor Complex Source | Since: base-4.9.0.0 |
Functor Identity Source | Since: base-4.8.0.0 |
Functor First Source | Since: base-4.8.0.0 |
Functor Last Source | Since: base-4.8.0.0 |
Functor Down Source | Since: base-4.11.0.0 |
Functor First Source | Since: base-4.9.0.0 |
Functor Last Source | Since: base-4.9.0.0 |
Functor Max Source | Since: base-4.9.0.0 |
Functor Min Source | Since: base-4.9.0.0 |
Functor Dual Source | Since: base-4.8.0.0 |
Functor Product Source | Since: base-4.8.0.0 |
Functor Sum Source | Since: base-4.8.0.0 |
Functor STM Source | Since: base-4.3.0.0 |
Functor NoIO Source | Since: base-4.8.0.0 |
Functor Par1 Source | Since: base-4.9.0.0 |
Functor ArgDescr Source | Since: base-4.7.0.0 |
Functor ArgOrder Source | Since: base-4.7.0.0 |
Functor OptDescr Source | Since: base-4.7.0.0 |
Functor ReadP Source | Since: base-2.1 |
Functor ReadPrec Source | Since: base-2.1 |
Functor IO Source | Since: base-2.1 |
Functor NonEmpty Source | Since: base-4.9.0.0 |
Functor Maybe Source | Since: base-2.1 |
Functor Solo Source | Since: base-4.15 |
Functor [] Source | Since: base-2.1 |
Monad m => Functor (WrappedMonad m) Source | Since: base-2.1 |
Defined 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 |
Defined 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 |
Functor (Either a) Source | Since: base-3.0 |
Functor (Proxy :: Type -> Type) Source | Since: base-4.7.0.0 |
Functor (Arg a) Source | Since: base-4.9.0.0 |
Functor (Array i) Source | Since: base-2.1 |
Functor (U1 :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (V1 :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (ST s) Source | Since: base-2.1 |
Functor ((,) a) Source | Since: base-2.1 |
Arrow a => Functor (WrappedArrow a b) Source | Since: base-2.1 |
Defined 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 |
Functor (Const m :: Type -> Type) Source | Since: base-2.1 |
Functor f => Functor (Ap f) Source | Since: base-4.12.0.0 |
Functor f => Functor (Alt f) Source | Since: base-4.8.0.0 |
(Generic1 f, Functor (Rep1 f)) => Functor (Generically1 f) Source | Since: base-4.17.0.0 |
Defined 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 |
Functor (URec (Ptr ()) :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (URec Char :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (URec Double :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (URec Float :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (URec Int :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor (URec Word :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor ((,,) a b) Source | Since: base-4.14.0.0 |
(Functor f, Functor g) => Functor (Product f g) Source | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (Sum f g) Source | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :*: g) Source | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :+: g) Source | Since: base-4.9.0.0 |
Functor (K1 i c :: Type -> Type) Source | Since: base-4.9.0.0 |
Functor ((,,,) a b c) Source | Since: base-4.14.0.0 |
Functor ((->) r) Source | Since: base-2.1 |
(Functor f, Functor g) => Functor (Compose f g) Source | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :.: g) Source | Since: base-4.9.0.0 |
Functor f => Functor (M1 i c f) Source | Since: base-4.9.0.0 |
class (Alternative m, Monad m) => MonadPlus m where Source
Monads that also support choice and failure.
Minimal complete definition
Nothing
Methods
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
MonadPlus STM Source | Since: base-4.3.0.0 |
MonadPlus ReadP Source | Since: base-2.1 |
MonadPlus ReadPrec Source | Since: base-2.1 |
MonadPlus IO Source | Since: base-4.9.0.0 |
MonadPlus Maybe Source | Since: base-2.1 |
MonadPlus [] Source | Since: base-2.1 |
(ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) Source | Since: base-4.6.0.0 |
Defined 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 |
MonadPlus (U1 :: Type -> Type) Source | Since: base-4.9.0.0 |
MonadPlus m => MonadPlus (Kleisli m a) Source | Since: base-4.14.0.0 |
MonadPlus f => MonadPlus (Ap f) Source | Since: base-4.12.0.0 |
MonadPlus f => MonadPlus (Alt f) Source | Since: base-4.8.0.0 |
MonadPlus f => MonadPlus (Rec1 f) Source | Since: base-4.9.0.0 |
(MonadPlus f, MonadPlus g) => MonadPlus (Product f g) Source | Since: base-4.9.0.0 |
(MonadPlus f, MonadPlus g) => MonadPlus (f :*: g) Source | Since: base-4.9.0.0 |
MonadPlus f => MonadPlus (M1 i c f) Source | Since: base-4.9.0.0 |
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
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 newtype
s 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
Identity of mappend
>>> "Hello world" <> mempty
"Hello world"
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
.
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
Monoid ByteArray Source | Since: base-4.17.0.0 |
Monoid All Source | Since: base-2.1 |
Monoid Any Source | Since: base-2.1 |
Monoid Event Source | Since: base-4.4.0.0 |
Monoid Lifetime Source |
Since: base-4.8.0.0 |
Monoid Ordering Source | Since: base-2.1 |
Monoid () Source | Since: base-2.1 |
FiniteBits a => Monoid (And a) Source | This constraint is arguably too strong. However, as some types (such as Since: base-4.16 |
FiniteBits a => Monoid (Iff a) Source | This constraint is arguably too strong. However, as some types (such as Since: base-4.16 |
Bits a => Monoid (Ior a) Source | Since: base-4.16 |
Bits a => Monoid (Xor a) Source | Since: base-4.16 |
Monoid (Comparison a) Source |
|
Defined in Data.Functor.Contravariant Methodsmempty :: Comparison a Source mappend :: Comparison a -> Comparison a -> Comparison a Source mconcat :: [Comparison a] -> Comparison a Source |
|
Monoid (Equivalence a) Source |
|
Defined in Data.Functor.Contravariant Methodsmempty :: Equivalence a Source mappend :: Equivalence a -> Equivalence a -> Equivalence a Source mconcat :: [Equivalence a] -> Equivalence a Source |
|
Monoid (Predicate a) Source |
|
Monoid a => Monoid (Identity a) Source | Since: base-4.9.0.0 |
Monoid (First a) Source | Since: base-2.1 |
Monoid (Last a) Source | Since: base-2.1 |
Monoid a => Monoid (Down a) Source | Since: base-4.11.0.0 |
(Ord a, Bounded a) => Monoid (Max a) Source | Since: base-4.9.0.0 |
(Ord a, Bounded a) => Monoid (Min a) Source | Since: base-4.9.0.0 |
Monoid m => Monoid (WrappedMonoid m) Source | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methodsmempty :: WrappedMonoid m Source mappend :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source mconcat :: [WrappedMonoid m] -> WrappedMonoid m Source |
|
Monoid a => Monoid (Dual a) Source | Since: base-2.1 |
Monoid (Endo a) Source | Since: base-2.1 |
Num a => Monoid (Product a) Source | Since: base-2.1 |
Num a => Monoid (Sum a) Source | Since: base-2.1 |
Monoid a => Monoid (STM a) Source | Since: base-4.17.0.0 |
(Generic a, Monoid (Rep a ())) => Monoid (Generically a) Source | Since: base-4.17.0.0 |
Defined in GHC.Generics Methodsmempty :: Generically a Source mappend :: Generically a -> Generically a -> Generically a Source mconcat :: [Generically a] -> Generically a Source |
|
Monoid p => Monoid (Par1 p) Source | Since: base-4.12.0.0 |
Monoid a => Monoid (IO a) Source | Since: base-4.9.0.0 |
Semigroup a => Monoid (Maybe a) Source | Lift a semigroup into Since 4.11.0: constraint on inner Since: base-2.1 |
Monoid a => Monoid (a) Source | Since: base-4.15 |
Monoid [a] Source | Since: base-2.1 |
Monoid a => Monoid (Op a b) Source |
|
Monoid (Proxy s) Source | Since: base-4.7.0.0 |
Monoid (U1 p) Source | Since: base-4.12.0.0 |
Monoid a => Monoid (ST s a) Source | Since: base-4.11.0.0 |
Monoid b => Monoid (a -> b) Source | Since: base-2.1 |
(Monoid a, Monoid b) => Monoid (a, b) Source | Since: base-2.1 |
Monoid a => Monoid (Const a b) Source | Since: base-4.9.0.0 |
(Applicative f, Monoid a) => Monoid (Ap f a) Source | Since: base-4.12.0.0 |
Alternative f => Monoid (Alt f a) Source | Since: base-4.8.0.0 |
Monoid (f p) => Monoid (Rec1 f p) Source | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) Source | Since: base-2.1 |
(Monoid (f a), Monoid (g a)) => Monoid (Product f g a) Source | Since: base-4.16.0.0 |
(Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p) Source | Since: base-4.12.0.0 |
Monoid c => Monoid (K1 i c p) Source | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) Source | Since: base-2.1 |
Monoid (f (g a)) => Monoid (Compose f g a) Source | Since: base-4.16.0.0 |
Monoid (f (g p)) => Monoid ((f :.: g) p) Source | Since: base-4.12.0.0 |
Monoid (f p) => Monoid (M1 i c f p) Source | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e) Source | Since: base-2.1 |
class Semigroup a where Source
The class of semigroups (types with an associative binary operation).
Instances should satisfy the following:
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
Semigroup ByteArray Source | Since: base-4.17.0.0 |
Semigroup All Source | Since: base-4.9.0.0 |
Semigroup Any Source | Since: base-4.9.0.0 |
Semigroup Void Source | Since: base-4.9.0.0 |
Semigroup Event Source | Since: base-4.10.0.0 |
Semigroup Lifetime Source | Since: base-4.10.0.0 |
Semigroup Ordering Source | Since: base-4.9.0.0 |
Semigroup () Source | Since: base-4.9.0.0 |
Bits a => Semigroup (And a) Source | Since: base-4.16 |
FiniteBits a => Semigroup (Iff a) Source | This constraint is arguably too strong. However, as some types (such as Since: base-4.16 |
Bits a => Semigroup (Ior a) Source | Since: base-4.16 |
Bits a => Semigroup (Xor a) Source | Since: base-4.16 |
Semigroup (Comparison a) Source |
|
Defined in Data.Functor.Contravariant Methods(<>) :: Comparison a -> Comparison a -> Comparison a Source sconcat :: NonEmpty (Comparison a) -> Comparison a Source stimes :: Integral b => b -> Comparison a -> Comparison a Source |
|
Semigroup (Equivalence a) Source |
|
Defined in Data.Functor.Contravariant Methods(<>) :: Equivalence a -> Equivalence a -> Equivalence a Source sconcat :: NonEmpty (Equivalence a) -> Equivalence a Source stimes :: Integral b => b -> Equivalence a -> Equivalence a Source |
|
Semigroup (Predicate a) Source |
|
Semigroup a => Semigroup (Identity a) Source | Since: base-4.9.0.0 |
Semigroup (First a) Source | Since: base-4.9.0.0 |
Semigroup (Last a) Source | Since: base-4.9.0.0 |
Semigroup a => Semigroup (Down a) Source | Since: base-4.11.0.0 |
Semigroup (First a) Source | Since: base-4.9.0.0 |
Semigroup (Last a) Source | Since: base-4.9.0.0 |
Ord a => Semigroup (Max a) Source | Since: base-4.9.0.0 |
Ord a => Semigroup (Min a) Source | Since: base-4.9.0.0 |
Monoid m => Semigroup (WrappedMonoid m) Source | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methods(<>) :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source sconcat :: NonEmpty (WrappedMonoid m) -> WrappedMonoid m Source stimes :: Integral b => b -> WrappedMonoid m -> WrappedMonoid m Source |
|
Semigroup a => Semigroup (Dual a) Source | Since: base-4.9.0.0 |
Semigroup (Endo a) Source | Since: base-4.9.0.0 |
Num a => Semigroup (Product a) Source | Since: base-4.9.0.0 |
Num a => Semigroup (Sum a) Source | Since: base-4.9.0.0 |
Semigroup a => Semigroup (STM a) Source | Since: base-4.17.0.0 |
(Generic a, Semigroup (Rep a ())) => Semigroup (Generically a) Source | Since: base-4.17.0.0 |
Defined in GHC.Generics Methods(<>) :: Generically a -> Generically a -> Generically a Source sconcat :: NonEmpty (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 |
Semigroup a => Semigroup (IO a) Source | Since: base-4.10.0.0 |
Semigroup (NonEmpty a) Source | Since: base-4.9.0.0 |
Semigroup a => Semigroup (Maybe a) Source | Since: base-4.9.0.0 |
Semigroup a => Semigroup (a) Source | Since: base-4.15 |
Semigroup [a] Source | Since: base-4.9.0.0 |
Semigroup (Either a b) Source | Since: base-4.9.0.0 |
Semigroup a => Semigroup (Op a b) Source |
|
Semigroup (Proxy s) Source | Since: base-4.9.0.0 |
Semigroup (U1 p) Source | Since: base-4.12.0.0 |
Semigroup (V1 p) Source | Since: base-4.12.0.0 |
Semigroup a => Semigroup (ST s a) Source | Since: base-4.11.0.0 |
Semigroup b => Semigroup (a -> b) Source | Since: base-4.9.0.0 |
(Semigroup a, Semigroup b) => Semigroup (a, b) Source | Since: base-4.9.0.0 |
Semigroup a => Semigroup (Const a b) Source | Since: base-4.9.0.0 |
(Applicative f, Semigroup a) => Semigroup (Ap f a) Source | Since: base-4.12.0.0 |
Alternative f => Semigroup (Alt f a) Source | Since: base-4.9.0.0 |
Semigroup (f p) => Semigroup (Rec1 f p) Source | Since: base-4.12.0.0 |
(Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) Source | Since: base-4.9.0.0 |
(Semigroup (f a), Semigroup (g a)) => Semigroup (Product f g a) Source | Since: base-4.16.0.0 |
(Semigroup (f p), Semigroup (g p)) => Semigroup ((f :*: g) p) Source | Since: base-4.12.0.0 |
Semigroup c => Semigroup (K1 i c p) Source | Since: base-4.12.0.0 |
(Semigroup a, Semigroup b, Semigroup c, Semigroup d) => Semigroup (a, b, c, d) Source | Since: base-4.9.0.0 |
Semigroup (f (g a)) => Semigroup (Compose f g a) Source | Since: base-4.16.0.0 |
Semigroup (f (g p)) => Semigroup ((f :.: g) p) Source | Since: base-4.12.0.0 |
Semigroup (f p) => Semigroup (M1 i c f p) Source | Since: base-4.12.0.0 |
(Semigroup a, Semigroup b, Semigroup c, Semigroup d, Semigroup e) => Semigroup (a, b, c, d, e) Source | Since: base-4.9.0.0 |
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.
liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d Source
Lift a ternary function to actions.
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
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
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
failIO :: String -> IO a Source
($) :: 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)...)
const x y
always evaluates to x
, ignoring its second argument.
>>> const 42 "hello"
42
>>> map (const 42) [0..3]
[42,42,42,42]
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"
(++) :: [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]
($!) :: 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.
shiftL# :: Word# -> Int# -> Word# Source
Shift the argument left by the specified number of bits (which must be non-negative).
shiftRL# :: Word# -> Int# -> Word# Source
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#)
iShiftL# :: Int# -> Int# -> Int# Source
Shift the argument left by the specified number of bits (which must be non-negative).
iShiftRA# :: Int# -> Int# -> Int# Source
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)
iShiftRL# :: Int# -> Int# -> Int# Source
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
breakpointCond :: Bool -> a -> a Source
unIO :: IO a -> State# RealWorld -> (# State# RealWorld, 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.
eqString :: String -> String -> Bool Source
This String
equality predicate is used when desugaring pattern-matches against strings.
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
unsafeChr :: Int -> Char 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
>>> 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
>>> 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
>>> 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
>>> 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
>>> 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
>>> divModInt 10 2
(5,0)
>>> divMod 10 2
(5,0)
shift_mask :: Int# -> Int# -> Int# Source
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.Classes
module GHC.CString
module GHC.Magic
module GHC.Magic.Dict
module GHC.Types
module GHC.Prim
module GHC.Prim.Ext
module GHC.Prim.PtrEq
module GHC.Err
module GHC.Maybe
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.4.2/docs/libraries/base-4.17.0.0/GHC-Base.html