Copyright | (C) 2011-2015 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | provisional |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Synopsis
- class Functor f => Alt (f :: Type -> Type) where
- (<!>) :: f a -> f a -> f a
- some :: Applicative f => f a -> f [a]
- many :: Applicative f => f a -> f [a]
- optional :: (Alt f, Applicative f) => f a -> f (Maybe a)
- galt :: (Generic1 f, Alt (Rep1 f)) => f a -> f a -> f a
- module Data.Functor.Apply
Documentation
class Functor f => Alt (f :: Type -> Type) where Source #
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
and ExceptT
e mSTM
instead satisfy the
"left catch" law:
pure a <!> b = pure a
Maybe
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)
(<!>) :: f a -> f a -> f a infixl 3 Source #
<|>
without a required empty
some :: Applicative f => f a -> f [a] Source #
many :: Applicative f => f a -> f [a] Source #
Instances
module Data.Functor.Apply