| Copyright | (c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2023 Kowainik | 
|---|---|
| License | MIT | 
| Maintainer | Kowainik <xrom.xkov@gmail.com> | 
| Stability | Stable | 
| Portability | Portable | 
| Safe Haskell | Safe | 
| Language | Haskell2010 | 
Relude.Applicative
Contents
Description
This module contains reexports of Applicative and related functional.
Additionally, it provides convenient combinators to work with Applicative.
Synopsis
- class Applicative f => Alternative (f :: Type -> Type) where
- class Functor f => Applicative (f :: Type -> Type) where
- newtype Const a (b :: k) = Const {- getConst :: a
 
- newtype ZipList a = ZipList {- getZipList :: [a]
 
- liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
- optional :: Alternative f => f a -> f (Maybe a)
- (<**>) :: Applicative f => f a -> f (a -> b) -> f b
- pass :: Applicative f => f ()
- appliedTo :: Applicative f => f a -> f (a -> b) -> f b
Reexports
Main data types and functions reexported from Control.Applicative.
class Applicative f => Alternative (f :: Type -> Type) where #
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 #
An associative binary operation
One or more.
Zero or more.
Instances
class Functor f => Applicative (f :: Type -> Type) where #
A functor with application, providing operations to
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:
(<*>) =liftA2id
liftA2f 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
- puref- <*>- purex =- pure(f x)
- Interchange
- u - <*>- purey =- 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
liftA2p (liftA2q u v) =liftA2f u .liftA2g 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 #
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 #
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 #
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 3Just 3
>>>Nothing *> Just 3Nothing
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 #
Sequence actions, discarding the value of the second argument.
Instances
| Applicative ZipList | f <$> ZipList xs1 <*> ... <*> ZipList xsN
    = ZipList (zipWithN f xs1 ... xsN)where  (\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 | 
| Applicative Complex | Since: base-4.9.0.0 | 
| Applicative Identity | Since: base-4.8.0.0 | 
| Applicative First | Since: base-4.8.0.0 | 
| Applicative Last | Since: base-4.8.0.0 | 
| Applicative Down | Since: base-4.11.0.0 | 
| Applicative First | Since: base-4.9.0.0 | 
| Applicative Last | Since: base-4.9.0.0 | 
| Applicative Max | Since: base-4.9.0.0 | 
| Applicative Min | Since: base-4.9.0.0 | 
| Applicative Dual | Since: base-4.8.0.0 | 
| Applicative Product | Since: base-4.8.0.0 | 
| Applicative Sum | Since: base-4.8.0.0 | 
| Applicative STM | Since: base-4.8.0.0 | 
| Applicative Par1 | Since: base-4.9.0.0 | 
| Applicative P | Since: base-4.5.0.0 | 
| Applicative ReadP | Since: base-4.6.0.0 | 
| Applicative ReadPrec | Since: base-4.6.0.0 | 
| Applicative Put | |
| Applicative Seq | Since: containers-0.5.4 | 
| Applicative Tree | |
| Applicative IO | Since: base-2.1 | 
| Applicative Q | |
| Applicative NonEmpty | Since: base-4.9.0.0 | 
| Applicative Maybe | Since: base-2.1 | 
| Applicative Solo | Since: base-4.15 | 
| Applicative [] | Since: base-2.1 | 
| Monad m => Applicative (WrappedMonad m) | Since: base-2.1 | 
| Defined in Control.Applicative Methods pure :: a -> WrappedMonad m a # (<*>) :: WrappedMonad m (a -> b) -> WrappedMonad m a -> WrappedMonad m b # liftA2 :: (a -> b -> c) -> WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m c # (*>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b # (<*) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m a # | |
| Arrow a => Applicative (ArrowMonad a) | Since: base-4.6.0.0 | 
| Defined in Control.Arrow Methods pure :: a0 -> ArrowMonad a a0 # (<*>) :: ArrowMonad a (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b # liftA2 :: (a0 -> b -> c) -> ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a c # (*>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b # (<*) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a a0 # | |
| Applicative (Either e) | Since: base-3.0 | 
| Applicative (Proxy :: Type -> Type) | Since: base-4.7.0.0 | 
| Applicative (U1 :: Type -> Type) | Since: base-4.9.0.0 | 
| (Functor m, Monad m) => Applicative (MaybeT m) | |
| Monoid a => Applicative ((,) a) | For tuples, the  ("hello ", (+15)) <*> ("world!", 2002)
("hello world!",2017)Since: base-2.1 | 
| Arrow a => Applicative (WrappedArrow a b) | Since: base-2.1 | 
| Defined in Control.Applicative Methods pure :: a0 -> WrappedArrow a b a0 # (<*>) :: WrappedArrow a b (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 # liftA2 :: (a0 -> b0 -> c) -> WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b c # (*>) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b b0 # (<*) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 # | |
| Applicative m => Applicative (Kleisli m a) | Since: base-4.14.0.0 | 
| Defined in Control.Arrow | |
| Monoid m => Applicative (Const m :: Type -> Type) | Since: base-2.0.1 | 
| Applicative f => Applicative (Ap f) | Since: base-4.12.0.0 | 
| Applicative f => Applicative (Alt f) | Since: base-4.8.0.0 | 
| Applicative f => Applicative (Rec1 f) | Since: base-4.9.0.0 | 
| (Applicative f, Monad f) => Applicative (WhenMissing f x) | Equivalent to  Since: containers-0.5.9 | 
| Defined in Data.IntMap.Internal Methods pure :: a -> WhenMissing f x a # (<*>) :: WhenMissing f x (a -> b) -> WhenMissing f x a -> WhenMissing f x b # liftA2 :: (a -> b -> c) -> WhenMissing f x a -> WhenMissing f x b -> WhenMissing f x c # (*>) :: WhenMissing f x a -> WhenMissing f x b -> WhenMissing f x b # (<*) :: WhenMissing f x a -> WhenMissing f x b -> WhenMissing f x a # | |
| (Functor m, Monad m) => Applicative (ErrorT e m) | |
| Defined in Control.Monad.Trans.Error | |
| (Functor m, Monad m) => Applicative (ExceptT e m) | |
| Defined in Control.Monad.Trans.Except | |
| Applicative m => Applicative (IdentityT m) | |
| Defined in Control.Monad.Trans.Identity | |
| Applicative m => Applicative (ReaderT r m) | |
| Defined in Control.Monad.Trans.Reader | |
| (Functor m, Monad m) => Applicative (StateT s m) | |
| Defined in Control.Monad.Trans.State.Strict | |
| (Monoid a, Monoid b) => Applicative ((,,) a b) | Since: base-4.14.0.0 | 
| (Applicative f, Applicative g) => Applicative (Product f g) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Product | |
| (Applicative f, Applicative g) => Applicative (f :*: g) | Since: base-4.9.0.0 | 
| Monoid c => Applicative (K1 i c :: Type -> Type) | Since: base-4.12.0.0 | 
| (Monad f, Applicative f) => Applicative (WhenMatched f x y) | Equivalent to  Since: containers-0.5.9 | 
| Defined in Data.IntMap.Internal Methods pure :: a -> WhenMatched f x y a # (<*>) :: WhenMatched f x y (a -> b) -> WhenMatched f x y a -> WhenMatched f x y b # liftA2 :: (a -> b -> c) -> WhenMatched f x y a -> WhenMatched f x y b -> WhenMatched f x y c # (*>) :: WhenMatched f x y a -> WhenMatched f x y b -> WhenMatched f x y b # (<*) :: WhenMatched f x y a -> WhenMatched f x y b -> WhenMatched f x y a # | |
| (Applicative f, Monad f) => Applicative (WhenMissing f k x) | Equivalent to  Since: containers-0.5.9 | 
| Defined in Data.Map.Internal Methods pure :: a -> WhenMissing f k x a # (<*>) :: WhenMissing f k x (a -> b) -> WhenMissing f k x a -> WhenMissing f k x b # liftA2 :: (a -> b -> c) -> WhenMissing f k x a -> WhenMissing f k x b -> WhenMissing f k x c # (*>) :: WhenMissing f k x a -> WhenMissing f k x b -> WhenMissing f k x b # (<*) :: WhenMissing f k x a -> WhenMissing f k x b -> WhenMissing f k x a # | |
| (Monoid a, Monoid b, Monoid c) => Applicative ((,,,) a b c) | Since: base-4.14.0.0 | 
| Defined in GHC.Base | |
| Applicative ((->) r) | Since: base-2.1 | 
| (Applicative f, Applicative g) => Applicative (Compose f g) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Compose | |
| (Applicative f, Applicative g) => Applicative (f :.: g) | Since: base-4.9.0.0 | 
| Applicative f => Applicative (M1 i c f) | Since: base-4.9.0.0 | 
| (Monad f, Applicative f) => Applicative (WhenMatched f k x y) | Equivalent to  Since: containers-0.5.9 | 
| Defined in Data.Map.Internal Methods pure :: a -> WhenMatched f k x y a # (<*>) :: WhenMatched f k x y (a -> b) -> WhenMatched f k x y a -> WhenMatched f k x y b # liftA2 :: (a -> b -> c) -> WhenMatched f k x y a -> WhenMatched f k x y b -> WhenMatched f k x y c # (*>) :: WhenMatched f k x y a -> WhenMatched f k x y b -> WhenMatched f k x y b # (<*) :: WhenMatched f k x y a -> WhenMatched f k x y b -> WhenMatched f k x y a # | |
The Const functor.
Instances
| Generic1 (Const a :: k -> Type) | |
| Bifoldable (Const :: Type -> TYPE LiftedRep -> Type) | Since: base-4.10.0.0 | 
| Bifunctor (Const :: Type -> Type -> Type) | Since: base-4.8.0.0 | 
| Bitraversable (Const :: Type -> Type -> Type) | Since: base-4.10.0.0 | 
| Defined in Data.Bitraversable Methods bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Const a b -> f (Const c d) # | |
| Eq2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 | 
| Ord2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Classes | |
| Read2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Classes Methods liftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (Const a b) # liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [Const a b] # liftReadPrec2 :: ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec (Const a b) # liftReadListPrec2 :: ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec [Const a b] # | |
| Show2 (Const :: Type -> TYPE LiftedRep -> Type) | Since: base-4.9.0.0 | 
| NFData2 (Const :: Type -> Type -> Type) | Since: deepseq-1.4.3.0 | 
| Defined in Control.DeepSeq | |
| Hashable2 (Const :: Type -> Type -> Type) | |
| Defined in Data.Hashable.Class | |
| Foldable (Const m :: TYPE LiftedRep -> Type) | Since: base-4.7.0.0 | 
| Defined in Data.Functor.Const Methods fold :: Monoid m0 => Const m m0 -> m0 # foldMap :: Monoid m0 => (a -> m0) -> Const m a -> m0 # foldMap' :: Monoid m0 => (a -> m0) -> Const m a -> m0 # foldr :: (a -> b -> b) -> b -> Const m a -> b # foldr' :: (a -> b -> b) -> b -> Const m a -> b # foldl :: (b -> a -> b) -> b -> Const m a -> b # foldl' :: (b -> a -> b) -> b -> Const m a -> b # foldr1 :: (a -> a -> a) -> Const m a -> a # foldl1 :: (a -> a -> a) -> Const m a -> a # elem :: Eq a => a -> Const m a -> Bool # maximum :: Ord a => Const m a -> a # minimum :: Ord a => Const m a -> a # | |
| Eq a => Eq1 (Const a :: Type -> Type) | Since: base-4.9.0.0 | 
| Ord a => Ord1 (Const a :: Type -> Type) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Classes | |
| Read a => Read1 (Const a :: Type -> Type) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Classes Methods liftReadsPrec :: (Int -> ReadS a0) -> ReadS [a0] -> Int -> ReadS (Const a a0) # liftReadList :: (Int -> ReadS a0) -> ReadS [a0] -> ReadS [Const a a0] # liftReadPrec :: ReadPrec a0 -> ReadPrec [a0] -> ReadPrec (Const a a0) # liftReadListPrec :: ReadPrec a0 -> ReadPrec [a0] -> ReadPrec [Const a a0] # | |
| Show a => Show1 (Const a :: TYPE LiftedRep -> Type) | Since: base-4.9.0.0 | 
| Contravariant (Const a :: Type -> Type) | |
| Traversable (Const m :: Type -> Type) | Since: base-4.7.0.0 | 
| Monoid m => Applicative (Const m :: Type -> Type) | Since: base-2.0.1 | 
| Functor (Const m :: Type -> Type) | Since: base-2.1 | 
| NFData a => NFData1 (Const a :: TYPE LiftedRep -> Type) | Since: deepseq-1.4.3.0 | 
| Defined in Control.DeepSeq | |
| Hashable a => Hashable1 (Const a :: Type -> Type) | |
| Defined in Data.Hashable.Class | |
| (Typeable k, Data a, Typeable b) => Data (Const a b) | Since: base-4.10.0.0 | 
| Defined in Data.Data Methods gfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> Const a b -> c (Const a b) # gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Const a b) # toConstr :: Const a b -> Constr # dataTypeOf :: Const a b -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Const a b)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Const a b)) # gmapT :: (forall b0. Data b0 => b0 -> b0) -> Const a b -> Const a b # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Const a b -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Const a b -> r # gmapQ :: (forall d. Data d => d -> u) -> Const a b -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Const a b -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) # | |
| IsString a => IsString (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.String Methods fromString :: String -> Const a b # | |
| Storable a => Storable (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const | |
| Monoid a => Monoid (Const a b) | Since: base-4.9.0.0 | 
| Semigroup a => Semigroup (Const a b) | Since: base-4.9.0.0 | 
| Bits a => Bits (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods (.&.) :: Const a b -> Const a b -> Const a b # (.|.) :: Const a b -> Const a b -> Const a b # xor :: Const a b -> Const a b -> Const a b # complement :: Const a b -> Const a b # shift :: Const a b -> Int -> Const a b # rotate :: Const a b -> Int -> Const a b # setBit :: Const a b -> Int -> Const a b # clearBit :: Const a b -> Int -> Const a b # complementBit :: Const a b -> Int -> Const a b # testBit :: Const a b -> Int -> Bool # bitSizeMaybe :: Const a b -> Maybe Int # isSigned :: Const a b -> Bool # shiftL :: Const a b -> Int -> Const a b # unsafeShiftL :: Const a b -> Int -> Const a b # shiftR :: Const a b -> Int -> Const a b # unsafeShiftR :: Const a b -> Int -> Const a b # rotateL :: Const a b -> Int -> Const a b # | |
| FiniteBits a => FiniteBits (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods finiteBitSize :: Const a b -> Int # countLeadingZeros :: Const a b -> Int # countTrailingZeros :: Const a b -> Int # | |
| Bounded a => Bounded (Const a b) | Since: base-4.9.0.0 | 
| Enum a => Enum (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods succ :: Const a b -> Const a b # pred :: Const a b -> Const a b # fromEnum :: Const a b -> Int # enumFrom :: Const a b -> [Const a b] # enumFromThen :: Const a b -> Const a b -> [Const a b] # enumFromTo :: Const a b -> Const a b -> [Const a b] # enumFromThenTo :: Const a b -> Const a b -> Const a b -> [Const a b] # | |
| Floating a => Floating (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods exp :: Const a b -> Const a b # log :: Const a b -> Const a b # sqrt :: Const a b -> Const a b # (**) :: Const a b -> Const a b -> Const a b # logBase :: Const a b -> Const a b -> Const a b # sin :: Const a b -> Const a b # cos :: Const a b -> Const a b # tan :: Const a b -> Const a b # asin :: Const a b -> Const a b # acos :: Const a b -> Const a b # atan :: Const a b -> Const a b # sinh :: Const a b -> Const a b # cosh :: Const a b -> Const a b # tanh :: Const a b -> Const a b # asinh :: Const a b -> Const a b # acosh :: Const a b -> Const a b # atanh :: Const a b -> Const a b # log1p :: Const a b -> Const a b # expm1 :: Const a b -> Const a b # | |
| RealFloat a => RealFloat (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods floatRadix :: Const a b -> Integer # floatDigits :: Const a b -> Int # floatRange :: Const a b -> (Int, Int) # decodeFloat :: Const a b -> (Integer, Int) # encodeFloat :: Integer -> Int -> Const a b # exponent :: Const a b -> Int # significand :: Const a b -> Const a b # scaleFloat :: Int -> Const a b -> Const a b # isInfinite :: Const a b -> Bool # isDenormalized :: Const a b -> Bool # isNegativeZero :: Const a b -> Bool # | |
| Generic (Const a b) | |
| Ix a => Ix (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods range :: (Const a b, Const a b) -> [Const a b] # index :: (Const a b, Const a b) -> Const a b -> Int # unsafeIndex :: (Const a b, Const a b) -> Const a b -> Int # inRange :: (Const a b, Const a b) -> Const a b -> Bool # rangeSize :: (Const a b, Const a b) -> Int # unsafeRangeSize :: (Const a b, Const a b) -> Int # | |
| Num a => Num (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const | |
| Read a => Read (Const a b) | This instance would be equivalent to the derived instances of the
  Since: base-4.8.0.0 | 
| Fractional a => Fractional (Const a b) | Since: base-4.9.0.0 | 
| Integral a => Integral (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods quot :: Const a b -> Const a b -> Const a b # rem :: Const a b -> Const a b -> Const a b # div :: Const a b -> Const a b -> Const a b # mod :: Const a b -> Const a b -> Const a b # quotRem :: Const a b -> Const a b -> (Const a b, Const a b) # divMod :: Const a b -> Const a b -> (Const a b, Const a b) # | |
| Real a => Real (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const Methods toRational :: Const a b -> Rational # | |
| RealFrac a => RealFrac (Const a b) | Since: base-4.9.0.0 | 
| Show a => Show (Const a b) | This instance would be equivalent to the derived instances of the
  Since: base-4.8.0.0 | 
| NFData a => NFData (Const a b) | Since: deepseq-1.4.0.0 | 
| Defined in Control.DeepSeq | |
| Eq a => Eq (Const a b) | Since: base-4.9.0.0 | 
| Ord a => Ord (Const a b) | Since: base-4.9.0.0 | 
| Hashable a => Hashable (Const a b) | |
| Defined in Data.Hashable.Class | |
| type Rep1 (Const a :: k -> Type) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const | |
| type Rep (Const a b) | Since: base-4.9.0.0 | 
| Defined in Data.Functor.Const | |
Lists, but with an Applicative functor based on zipping.
Constructors
| ZipList | |
| Fields 
 | |
Instances
| Foldable ZipList | Since: base-4.9.0.0 | 
| Defined in Control.Applicative Methods fold :: Monoid m => ZipList m -> m # foldMap :: Monoid m => (a -> m) -> ZipList a -> m # foldMap' :: Monoid m => (a -> m) -> ZipList a -> m # foldr :: (a -> b -> b) -> b -> ZipList a -> b # foldr' :: (a -> b -> b) -> b -> ZipList a -> b # foldl :: (b -> a -> b) -> b -> ZipList a -> b # foldl' :: (b -> a -> b) -> b -> ZipList a -> b # foldr1 :: (a -> a -> a) -> ZipList a -> a # foldl1 :: (a -> a -> a) -> ZipList a -> a # elem :: Eq a => a -> ZipList a -> Bool # maximum :: Ord a => ZipList a -> a # minimum :: Ord a => ZipList a -> a # | |
| Traversable ZipList | Since: base-4.9.0.0 | 
| Alternative ZipList | Since: base-4.11.0.0 | 
| Applicative ZipList | f <$> ZipList xs1 <*> ... <*> ZipList xsN
    = ZipList (zipWithN f xs1 ... xsN)where  (\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 | 
| Functor ZipList | Since: base-2.1 | 
| NFData1 ZipList | Since: deepseq-1.4.3.0 | 
| Defined in Control.DeepSeq | |
| Generic1 ZipList | |
| Data a => Data (ZipList a) | Since: base-4.14.0.0 | 
| Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ZipList a -> c (ZipList a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ZipList a) # toConstr :: ZipList a -> Constr # dataTypeOf :: ZipList a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ZipList a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ZipList a)) # gmapT :: (forall b. Data b => b -> b) -> ZipList a -> ZipList a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ZipList a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ZipList a -> r # gmapQ :: (forall d. Data d => d -> u) -> ZipList a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> ZipList a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) # | |
| IsList (ZipList a) | Since: base-4.15.0.0 | 
| Generic (ZipList a) | |
| Read a => Read (ZipList a) | Since: base-4.7.0.0 | 
| Show a => Show (ZipList a) | Since: base-4.7.0.0 | 
| NFData a => NFData (ZipList a) | Since: deepseq-1.4.0.0 | 
| Defined in Control.DeepSeq | |
| Eq a => Eq (ZipList a) | Since: base-4.7.0.0 | 
| Ord a => Ord (ZipList a) | Since: base-4.7.0.0 | 
| type Rep1 ZipList | Since: base-4.7.0.0 | 
| Defined in Control.Applicative | |
| type Item (ZipList a) | |
| type Rep (ZipList a) | Since: base-4.7.0.0 | 
| Defined in Control.Applicative | |
liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d #
Lift a ternary function to actions.
optional :: Alternative f => f a -> f (Maybe a) #
One or none.
It is useful for modelling any computation that is allowed to fail.
Examples
Using the Alternative instance of Control.Monad.Except, the following functions:
>>>import Control.Monad.Except
>>>canFail = throwError "it failed" :: Except String Int>>>final = return 42 :: Except String Int
Can be combined by allowing the first function to fail:
>>>runExcept $ canFail *> finalLeft "it failed">>>runExcept $ optional canFail *> finalRight 42
(<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 #
A variant of <*> with the arguments reversed.
Combinators
pass :: Applicative f => f () Source #
Shorter alias for pure ().
>>>pass :: Maybe ()Just ()
Useful shortcut when need an empty action:
printJust :: Maybe Int -> IO ()
printJust mInt = case mInt of
    Just i -> putStrLn $ "Number: " ++ show i
    Nothing -> pass
appliedTo :: Applicative f => f a -> f (a -> b) -> f b Source #
Named version of the <**> operator, which is <*> but flipped. It is
helpful for chaining applicative operations in forward applications using
&.
>>>Just (+ 1) & appliedTo (Just 2)Just 3>>>Just (+) & appliedTo (Just 1) & appliedTo (Just 2)Just 3>>>Nothing & appliedTo (Just 2)Nothing
Since: 0.5.0