Control.Alternative.Free

Description

Left distributive Alternative functors for free, based on a design by Stijn van Drongelen.

Synopsis

# Documentation

newtype Alt f a Source #

Constructors

 Alt Fieldsalternatives :: [AltF f a]

Instances

 Functor (Alt f) Source # Methodsfmap :: (a -> b) -> Alt f a -> Alt f b #(<$) :: a -> Alt f b -> Alt f a # Source # Methodspure :: a -> Alt f a #(<*>) :: Alt f (a -> b) -> Alt f a -> Alt f b #liftA2 :: (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c #(*>) :: Alt f a -> Alt f b -> Alt f b #(<*) :: Alt f a -> Alt f b -> Alt f a # Source # Methodsempty :: Alt f a #(<|>) :: Alt f a -> Alt f a -> Alt f a #some :: Alt f a -> Alt f [a] #many :: Alt f a -> Alt f [a] # Alt (Alt f) Source # Methods() :: Alt f a -> Alt f a -> Alt f a #some :: Applicative (Alt f) => Alt f a -> Alt f [a] #many :: Applicative (Alt f) => Alt f a -> Alt f [a] # Apply (Alt f) Source # Methods(<.>) :: Alt f (a -> b) -> Alt f a -> Alt f b #(.>) :: Alt f a -> Alt f b -> Alt f b #(<.) :: Alt f a -> Alt f b -> Alt f a #liftF2 :: (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c # Semigroup (Alt f a) Source # Methods(<>) :: Alt f a -> Alt f a -> Alt f a #sconcat :: NonEmpty (Alt f a) -> Alt f a #stimes :: Integral b => b -> Alt f a -> Alt f a # Monoid (Alt f a) Source # Methodsmempty :: Alt f a #mappend :: Alt f a -> Alt f a -> Alt f a #mconcat :: [Alt f a] -> Alt f a # data AltF f a where Source # Constructors  Ap :: f a -> Alt f (a -> b) -> AltF f b infixl 3 Pure :: a -> AltF f a Instances  Functor (AltF f) Source # Methodsfmap :: (a -> b) -> AltF f a -> AltF f b #(<$) :: a -> AltF f b -> AltF f a # Source # Methodspure :: a -> AltF f a #(<*>) :: AltF f (a -> b) -> AltF f a -> AltF f b #liftA2 :: (a -> b -> c) -> AltF f a -> AltF f b -> AltF f c #(*>) :: AltF f a -> AltF f b -> AltF f b #(<*) :: AltF f a -> AltF f b -> AltF f a #

runAlt :: forall f g a. Alternative g => (forall x. f x -> g x) -> Alt f a -> g a Source #

Given a natural transformation from f to g, this gives a canonical monoidal natural transformation from Alt f to g.

liftAlt :: f a -> Alt f a Source #

A version of lift that can be used with any f.

hoistAlt :: (forall a. f a -> g a) -> Alt f b -> Alt g b Source #

Given a natural transformation from f to g this gives a monoidal natural transformation from Alt f to Alt g.