{-# LANGUAGE PackageImports #-}

-- | This module describes a structure intermediate between a 'Functor' and
-- a 'Monad' (technically, a strong lax monoidal functor).
-- Compared with 'Monad', the 'Applicative' interface lacks the full power of
-- the binding operation '>>=', but
--
-- * it has more instances,
--
-- * it is sufficient for many uses such as context-free parsing, and
--
-- * instances can perform analysis of computations before they are
--   executed, and thus produce shared optimizations.
--
module Control.Applicative (
  -- * Applicative functors
  Applicative(pure, liftA2, (<*>), (*>), (<*)),

  -- * Alternatives
  Alternative(empty, (<|>), some, many),

  -- * Utility functions
  (<**>),  liftA,  liftA3,  optional

  ) where

import           "base" Control.Applicative