Laws:
<!> is associative: (a <!> b) <!> c = a <!> (b <!> c)
<$> left-distributes over <!>: f <$> (a <!> b) = (f <$> a) <!> (f <$> b)If extended to an Alternative then <!> should equal <|>.
Ideally, an instance of Alt also satisfies the "left distribution" law of MonadPlus with respect to <.>:
<.> right-distributes over <!>: (a <!> b) <.> c = (a <.> c) <!> (b <.> c)IO, Either a, ExceptT e m and GHC.Conc.STM instead satisfy the
"left catch" law:
pure a <!> b = pure aMaybe and Identity satisfy both "left distribution" and "left catch".
These variations cannot be stated purely in terms of the dependencies of Alt.
When and if MonadPlus is successfully refactored, this class should also be refactored to remove these instances.
The right distributive law should extend in the cases where the a Bind or Monad is
provided to yield variations of the right distributive law:
(m <!> n) >>- f = (m >>- f) <!> (m >>- f)
(m <!> n) >>= f = (m >>= f) <!> (m >>= f)Methods
(<!>) :: f a -> f a -> f ainfixl 3<|> without a required
emptysome :: Applicative f => f a -> f [a]many :: Applicative f => f a -> f [a]
Instances43Alt, …
Alt FirstDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt LastDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt IntMapDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt SeqDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt NonEmptyDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt IdentityDefined in semigroupoids-6.0.1 · Data.Functor.AltChoose the first option every time. While 'choose the last option' every time is also valid, this instance satisfies more laws.
Alt FirstDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt LastDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt MaybeDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt IODefined in semigroupoids-6.0.1 · Data.Functor.AltThis instance does not actually satisfy the (<.>) right distributive law It instead satisfies the "left catch" law
Alt []Defined in semigroupoids-6.0.1 · Data.Functor.AltAlternative f => Alt (WrappedApplicative f)Defined in semigroupoids-6.0.1 · Data.Functor.AltMonadPlus m => Alt (WrappedMonad m)Defined in semigroupoids-6.0.1 · Data.Functor.AltOrd k => Alt (Map k)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt ProxyDefined in semigroupoids-6.0.1 · Data.Functor.AltAlt U1Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt V1Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt (Either a)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (Lift f)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Functor f, Monad f) => Alt (MaybeT f)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Hashable k, Eq k) => Alt (HashMap k)Defined in semigroupoids-6.0.1 · Data.Functor.AltArrowPlus a => Alt (WrappedArrow a b)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (Rec1 f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (Static f a)Defined in semigroupoids-6.0.1 · Data.Semigroupoid.StaticAlt f => Alt (Backwards f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (IdentityT f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (ReaderT e f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (StateT e f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (StateT e f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (WriterT w f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (WriterT w f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (WriterT w f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (Reverse f)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Functor f, Monad f, Semigroup e) => Alt (ExceptT e f)Defined in semigroupoids-6.0.1 · Data.Functor.AltSemigroup c => Alt (K1 i c)Defined in semigroupoids-6.0.1 · Data.Functor.Altsince 5.3.8(Alt f, Alt g) => Alt (Product f g)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Alt f, Alt g) => Alt (f :*: g)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (M1 i c f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (RWST r w s f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (RWST r w s f)Defined in semigroupoids-6.0.1 · Data.Functor.AltAlt f => Alt (RWST r w s f)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Alt f, Functor g) => Alt (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Alt f, Functor g) => Alt (f :.: g)Defined in semigroupoids-6.0.1 · Data.Functor.Alt