(original) (raw)
{-# LANGUAGE Trustworthy #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NoImplicitPrelude #-}
module Control.Applicative (
[Applicative](GHC.Base.html#Applicative)(..),
[Alternative](GHC.Base.html#Alternative)(..),
[Const](Data.Functor.Const.html#Const)(..), [WrappedMonad](Control.Applicative.html#WrappedMonad)(..), [WrappedArrow](Control.Applicative.html#WrappedArrow)(..), [ZipList](Control.Applicative.html#ZipList)(..),
[(<$>)](Data.Functor.html#%3C%24%3E), [(<$)](GHC.Base.html#%3C%24), [(<**>)](GHC.Base.html#%3C%2A%2A%3E),
[liftA](GHC.Base.html#liftA), [liftA3](GHC.Base.html#liftA3),
[optional](Control.Applicative.html#optional),
[asum](Data.Foldable.html#asum),
) whereimport Control.Category hiding ((.), id) import Control.Arrow import Data.Maybe import Data.Tuple import Data.Eq import Data.Ord import Data.Foldable (Foldable(..), asum) import Data.Functor ((<$>)) import Data.Functor.Const (Const(..))
import GHC.Base import GHC.Generics import GHC.List (repeat, zipWith, drop) import GHC.Read (Read) import GHC.Show (Show)
newtype WrappedMonad m a = WrapMonad { forall (m :: * -> *) a. WrappedMonad m a -> m a
unwrapMonad :: m a }
deriving ( (forall x. WrappedMonad m a -> Rep (WrappedMonad m a) x)
-> (forall x. Rep (WrappedMonad m a) x -> WrappedMonad m a)
-> Generic (WrappedMonad m a)
forall x. Rep (WrappedMonad m a) x -> WrappedMonad m a
forall x. WrappedMonad m a -> Rep (WrappedMonad m a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (m :: * -> *) a x.
Rep (WrappedMonad m a) x -> WrappedMonad m a
forall (m :: * -> *) a x.
WrappedMonad m a -> Rep (WrappedMonad m a) x
$cto :: forall (m :: * -> *) a x.
Rep (WrappedMonad m a) x -> WrappedMonad m a
$cfrom :: forall (m :: * -> *) a x.
WrappedMonad m a -> Rep (WrappedMonad m a) x
Generic
, (forall a. WrappedMonad m a -> Rep1 (WrappedMonad m) a)
-> (forall a. Rep1 (WrappedMonad m) a -> WrappedMonad m a)
-> Generic1 (WrappedMonad m)
forall a. Rep1 (WrappedMonad m) a -> WrappedMonad m a
forall a. WrappedMonad m a -> Rep1 (WrappedMonad m) a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
forall (m :: * -> *) a. Rep1 (WrappedMonad m) a -> WrappedMonad m a
forall (m :: * -> *) a. WrappedMonad m a -> Rep1 (WrappedMonad m) a
$cto1 :: forall (m :: * -> *) a. Rep1 (WrappedMonad m) a -> WrappedMonad m a
$cfrom1 :: forall (m :: * -> *) a. WrappedMonad m a -> Rep1 (WrappedMonad m) a
Generic1
, Applicative (WrappedMonad m)
Applicative (WrappedMonad m)
-> (forall a b.
WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b)
-> (forall a b.
WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b)
-> (forall a. a -> WrappedMonad m a)
-> Monad (WrappedMonad m)
forall a. a -> WrappedMonad m a
forall a b.
WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b
forall a b.
WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b
forall {m :: * -> *}. Monad m => Applicative (WrappedMonad m)
forall (m :: * -> *) a. Monad m => a -> WrappedMonad m a
forall (m :: * -> *) a b.
Monad m =>
WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b
forall (m :: * -> *) a b.
Monad m =>
WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: forall a. a -> WrappedMonad m a
$creturn :: forall (m :: * -> *) a. Monad m => a -> WrappedMonad m a
:: forall a b. WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b $c>> :: forall (m :: * -> *) a b. Monad m => WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b = :: forall a b. WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b $c>>= :: forall (m :: * -> *) a b. Monad m => WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b Monad
)
instance Monad m => Functor (WrappedMonad m) where fmap :: forall a b. (a -> b) -> WrappedMonad m a -> WrappedMonad m b fmap a -> b f (WrapMonad m a v) = m b -> WrappedMonad m b forall (m :: * -> *) a. m a -> WrappedMonad m a WrapMonad ((a -> b) -> m a -> m b forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r liftM a -> b f m a v)
instance Monad m => Applicative (WrappedMonad m) where
pure :: forall a. a -> WrappedMonad m a
pure = m a -> WrappedMonad m a
forall (m :: * -> *) a. m a -> WrappedMonad m a
WrapMonad (m a -> WrappedMonad m a) -> (a -> m a) -> a -> WrappedMonad m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
WrapMonad m (a -> b)
f <*> :: forall a b.
WrappedMonad m (a -> b) -> WrappedMonad m a -> WrappedMonad m b
<*> WrapMonad m a
v = m b -> WrappedMonad m b
forall (m :: * -> *) a. m a -> WrappedMonad m a
WrapMonad (m (a -> b)
f m (a -> b) -> m a -> m b
forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap m a
v)
liftA2 :: forall a b c.
(a -> b -> c)
-> WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m c
liftA2 a -> b -> c
f (WrapMonad m a
x) (WrapMonad m b
y) = m c -> WrappedMonad m c
forall (m :: * -> *) a. m a -> WrappedMonad m a
WrapMonad ((a -> b -> c) -> m a -> m b -> m c
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 a -> b -> c
f m a
x m b
y)
instance MonadPlus m => Alternative (WrappedMonad m) where
empty :: forall a. WrappedMonad m a
empty = m a -> WrappedMonad m a
forall (m :: * -> *) a. m a -> WrappedMonad m a
WrapMonad m a
forall (m :: * -> *) a. MonadPlus m => m a
mzero
WrapMonad m a
u <|> :: forall a. WrappedMonad m a -> WrappedMonad m a -> WrappedMonad m a
<|> WrapMonad m a
v = m a -> WrappedMonad m a
forall (m :: * -> *) a. m a -> WrappedMonad m a
WrapMonad (m a
u m a -> m a -> m a
forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
mplus m a
v)
newtype WrappedArrow a b c = WrapArrow { forall (a :: * -> * -> *) b c. WrappedArrow a b c -> a b c
unwrapArrow :: a b c }
deriving ( (forall x. WrappedArrow a b c -> Rep (WrappedArrow a b c) x)
-> (forall x. Rep (WrappedArrow a b c) x -> WrappedArrow a b c)
-> Generic (WrappedArrow a b c)
forall x. Rep (WrappedArrow a b c) x -> WrappedArrow a b c
forall x. WrappedArrow a b c -> Rep (WrappedArrow a b c) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (a :: * -> * -> *) b c x.
Rep (WrappedArrow a b c) x -> WrappedArrow a b c
forall (a :: * -> * -> *) b c x.
WrappedArrow a b c -> Rep (WrappedArrow a b c) x
$cto :: forall (a :: * -> * -> *) b c x.
Rep (WrappedArrow a b c) x -> WrappedArrow a b c
$cfrom :: forall (a :: * -> * -> *) b c x.
WrappedArrow a b c -> Rep (WrappedArrow a b c) x
Generic
, (forall a. WrappedArrow a b a -> Rep1 (WrappedArrow a b) a)
-> (forall a. Rep1 (WrappedArrow a b) a -> WrappedArrow a b a)
-> Generic1 (WrappedArrow a b)
forall a. Rep1 (WrappedArrow a b) a -> WrappedArrow a b a
forall a. WrappedArrow a b a -> Rep1 (WrappedArrow a b) a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
forall (a :: * -> * -> *) b a.
Rep1 (WrappedArrow a b) a -> WrappedArrow a b a
forall (a :: * -> * -> *) b a.
WrappedArrow a b a -> Rep1 (WrappedArrow a b) a
$cto1 :: forall (a :: * -> * -> *) b a.
Rep1 (WrappedArrow a b) a -> WrappedArrow a b a
$cfrom1 :: forall (a :: * -> * -> *) b a.
WrappedArrow a b a -> Rep1 (WrappedArrow a b) a
Generic1
)
instance Arrow a => Functor (WrappedArrow a b) where fmap :: forall a b. (a -> b) -> WrappedArrow a b a -> WrappedArrow a b b fmap a -> b f (WrapArrow a b a a) = a b b -> WrappedArrow a b b forall (a :: * -> * -> *) b c. a b c -> WrappedArrow a b c WrapArrow (a b a a a b a -> a a b -> a b b forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c >>> (a -> b) -> a a b forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c arr a -> b f)
instance Arrow a => Applicative (WrappedArrow a b) where pure :: forall a. a -> WrappedArrow a b a pure a x = a b a -> WrappedArrow a b a forall (a :: * -> * -> *) b c. a b c -> WrappedArrow a b c WrapArrow ((b -> a) -> a b a forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c arr (a -> b -> a forall a b. a -> b -> a const a x)) liftA2 :: forall a b c. (a -> b -> c) -> WrappedArrow a b a -> WrappedArrow a b b -> WrappedArrow a b c liftA2 a -> b -> c f (WrapArrow a b a u) (WrapArrow a b b v) = a b c -> WrappedArrow a b c forall (a :: * -> * -> *) b c. a b c -> WrappedArrow a b c WrapArrow (a b a u a b a -> a b b -> a b (a, b) forall (a :: * -> * -> *) b c c'. Arrow a => a b c -> a b c' -> a b (c, c') &&& a b b v a b (a, b) -> a (a, b) c -> a b c forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c >>> ((a, b) -> c) -> a (a, b) c forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c arr ((a -> b -> c) -> (a, b) -> c forall a b c. (a -> b -> c) -> (a, b) -> c uncurry a -> b -> c f))
instance (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) where empty :: forall a. WrappedArrow a b a empty = a b a -> WrappedArrow a b a forall (a :: * -> * -> *) b c. a b c -> WrappedArrow a b c WrapArrow a b a forall (a :: * -> * -> *) b c. ArrowZero a => a b c zeroArrow WrapArrow a b a u <|> :: forall a. WrappedArrow a b a -> WrappedArrow a b a -> WrappedArrow a b a <|> WrapArrow a b a v = a b a -> WrappedArrow a b a forall (a :: * -> * -> *) b c. a b c -> WrappedArrow a b c WrapArrow (a b a u a b a -> a b a -> a b a forall (a :: * -> * -> *) b c. ArrowPlus a => a b c -> a b c -> a b c <+> a b a v)
newtype ZipList a = ZipList { forall a. ZipList a -> [a]
getZipList :: [a] }
deriving ( Int -> ZipList a -> ShowS
[ZipList a] -> ShowS
ZipList a -> String
(Int -> ZipList a -> ShowS)
-> (ZipList a -> String)
-> ([ZipList a] -> ShowS)
-> Show (ZipList a)
forall a. Show a => Int -> ZipList a -> ShowS
forall a. Show a => [ZipList a] -> ShowS
forall a. Show a => ZipList a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ZipList a] -> ShowS
$cshowList :: forall a. Show a => [ZipList a] -> ShowS
show :: ZipList a -> String
$cshow :: forall a. Show a => ZipList a -> String
showsPrec :: Int -> ZipList a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ZipList a -> ShowS
Show
, ZipList a -> ZipList a -> Bool
(ZipList a -> ZipList a -> Bool)
-> (ZipList a -> ZipList a -> Bool) -> Eq (ZipList a)
forall a. Eq a => ZipList a -> ZipList a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ZipList a -> ZipList a -> Bool
$c/= :: forall a. Eq a => ZipList a -> ZipList a -> Bool
== :: ZipList a -> ZipList a -> Bool
$c== :: forall a. Eq a => ZipList a -> ZipList a -> Bool
Eq
, Eq (ZipList a)
Eq (ZipList a)
-> (ZipList a -> ZipList a -> Ordering)
-> (ZipList a -> ZipList a -> Bool)
-> (ZipList a -> ZipList a -> Bool)
-> (ZipList a -> ZipList a -> Bool)
-> (ZipList a -> ZipList a -> Bool)
-> (ZipList a -> ZipList a -> ZipList a)
-> (ZipList a -> ZipList a -> ZipList a)
-> Ord (ZipList a)
ZipList a -> ZipList a -> Bool
ZipList a -> ZipList a -> Ordering
ZipList a -> ZipList a -> ZipList a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall {a}. Ord a => Eq (ZipList a)
forall a. Ord a => ZipList a -> ZipList a -> Bool
forall a. Ord a => ZipList a -> ZipList a -> Ordering
forall a. Ord a => ZipList a -> ZipList a -> ZipList a
min :: ZipList a -> ZipList a -> ZipList a
$cmin :: forall a. Ord a => ZipList a -> ZipList a -> ZipList a
max :: ZipList a -> ZipList a -> ZipList a
$cmax :: forall a. Ord a => ZipList a -> ZipList a -> ZipList a
= :: ZipList a -> ZipList a -> Bool $c>= :: forall a. Ord a => ZipList a -> ZipList a -> Bool :: ZipList a -> ZipList a -> Bool $c> :: forall a. Ord a => ZipList a -> ZipList a -> Bool <= :: ZipList a -> ZipList a -> Bool $c<= :: forall a. Ord a => ZipList a -> ZipList a -> Bool < :: ZipList a -> ZipList a -> Bool $c< :: forall a. Ord a => ZipList a -> ZipList a -> Bool compare :: ZipList a -> ZipList a -> Ordering $ccompare :: forall a. Ord a => ZipList a -> ZipList a -> Ordering Ord
, ReadPrec [ZipList a] ReadPrec (ZipList a) Int -> ReadS (ZipList a) ReadS [ZipList a] (Int -> ReadS (ZipList a)) -> ReadS [ZipList a] -> ReadPrec (ZipList a) -> ReadPrec [ZipList a] -> Read (ZipList a) forall a. Read a => ReadPrec [ZipList a] forall a. Read a => ReadPrec (ZipList a) forall a. Read a => Int -> ReadS (ZipList a) forall a. Read a => ReadS [ZipList a] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [ZipList a] $creadListPrec :: forall a. Read a => ReadPrec [ZipList a] readPrec :: ReadPrec (ZipList a) $creadPrec :: forall a. Read a => ReadPrec (ZipList a) readList :: ReadS [ZipList a] $creadList :: forall a. Read a => ReadS [ZipList a] readsPrec :: Int -> ReadS (ZipList a) $creadsPrec :: forall a. Read a => Int -> ReadS (ZipList a) Read
, (forall a b. (a -> b) -> ZipList a -> ZipList b) -> (forall a b. a -> ZipList b -> ZipList a) -> Functor ZipList forall a b. a -> ZipList b -> ZipList a forall a b. (a -> b) -> ZipList a -> ZipList b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: forall a b. a -> ZipList b -> ZipList a c<c<c< :: forall a b. a -> ZipList b -> ZipList a fmap :: forall a b. (a -> b) -> ZipList a -> ZipList b $cfmap :: forall a b. (a -> b) -> ZipList a -> ZipList b Functor
, (forall m. Monoid m => ZipList m -> m) -> (forall m a. Monoid m => (a -> m) -> ZipList a -> m) -> (forall m a. Monoid m => (a -> m) -> ZipList a -> m) -> (forall a b. (a -> b -> b) -> b -> ZipList a -> b) -> (forall a b. (a -> b -> b) -> b -> ZipList a -> b) -> (forall b a. (b -> a -> b) -> b -> ZipList a -> b) -> (forall b a. (b -> a -> b) -> b -> ZipList a -> b) -> (forall a. (a -> a -> a) -> ZipList a -> a) -> (forall a. (a -> a -> a) -> ZipList a -> a) -> (forall a. ZipList a -> [a]) -> (forall a. ZipList a -> Bool) -> (forall a. ZipList a -> Int) -> (forall a. Eq a => a -> ZipList a -> Bool) -> (forall a. Ord a => ZipList a -> a) -> (forall a. Ord a => ZipList a -> a) -> (forall a. Num a => ZipList a -> a) -> (forall a. Num a => ZipList a -> a) -> Foldable ZipList forall a. Eq a => a -> ZipList a -> Bool forall a. Num a => ZipList a -> a forall a. Ord a => ZipList a -> a forall m. Monoid m => ZipList m -> m forall a. ZipList a -> Bool forall a. ZipList a -> Int forall a. ZipList a -> [a] forall a. (a -> a -> a) -> ZipList a -> a forall m a. Monoid m => (a -> m) -> ZipList a -> m forall b a. (b -> a -> b) -> b -> ZipList a -> b forall a b. (a -> b -> b) -> b -> ZipList a -> b forall (t :: * -> *). (forall m. Monoid m => t m -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. t a -> [a]) -> (forall a. t a -> Bool) -> (forall a. t a -> Int) -> (forall a. Eq a => a -> t a -> Bool) -> (forall a. Ord a => t a -> a) -> (forall a. Ord a => t a -> a) -> (forall a. Num a => t a -> a) -> (forall a. Num a => t a -> a) -> Foldable t product :: forall a. Num a => ZipList a -> a $cproduct :: forall a. Num a => ZipList a -> a sum :: forall a. Num a => ZipList a -> a $csum :: forall a. Num a => ZipList a -> a minimum :: forall a. Ord a => ZipList a -> a $cminimum :: forall a. Ord a => ZipList a -> a maximum :: forall a. Ord a => ZipList a -> a $cmaximum :: forall a. Ord a => ZipList a -> a elem :: forall a. Eq a => a -> ZipList a -> Bool $celem :: forall a. Eq a => a -> ZipList a -> Bool length :: forall a. ZipList a -> Int $clength :: forall a. ZipList a -> Int null :: forall a. ZipList a -> Bool $cnull :: forall a. ZipList a -> Bool toList :: forall a. ZipList a -> [a] $ctoList :: forall a. ZipList a -> [a] foldl1 :: forall a. (a -> a -> a) -> ZipList a -> a $cfoldl1 :: forall a. (a -> a -> a) -> ZipList a -> a foldr1 :: forall a. (a -> a -> a) -> ZipList a -> a $cfoldr1 :: forall a. (a -> a -> a) -> ZipList a -> a foldl' :: forall b a. (b -> a -> b) -> b -> ZipList a -> b $cfoldl' :: forall b a. (b -> a -> b) -> b -> ZipList a -> b foldl :: forall b a. (b -> a -> b) -> b -> ZipList a -> b $cfoldl :: forall b a. (b -> a -> b) -> b -> ZipList a -> b foldr' :: forall a b. (a -> b -> b) -> b -> ZipList a -> b $cfoldr' :: forall a b. (a -> b -> b) -> b -> ZipList a -> b foldr :: forall a b. (a -> b -> b) -> b -> ZipList a -> b $cfoldr :: forall a b. (a -> b -> b) -> b -> ZipList a -> b foldMap' :: forall m a. Monoid m => (a -> m) -> ZipList a -> m $cfoldMap' :: forall m a. Monoid m => (a -> m) -> ZipList a -> m foldMap :: forall m a. Monoid m => (a -> m) -> ZipList a -> m $cfoldMap :: forall m a. Monoid m => (a -> m) -> ZipList a -> m fold :: forall m. Monoid m => ZipList m -> m $cfold :: forall m. Monoid m => ZipList m -> m Foldable , (forall x. ZipList a -> Rep (ZipList a) x) -> (forall x. Rep (ZipList a) x -> ZipList a) -> Generic (ZipList a) forall x. Rep (ZipList a) x -> ZipList a forall x. ZipList a -> Rep (ZipList a) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall a x. Rep (ZipList a) x -> ZipList a forall a x. ZipList a -> Rep (ZipList a) x $cto :: forall a x. Rep (ZipList a) x -> ZipList a $cfrom :: forall a x. ZipList a -> Rep (ZipList a) x Generic
, (forall a. ZipList a -> Rep1 ZipList a) -> (forall a. Rep1 ZipList a -> ZipList a) -> Generic1 ZipList forall a. Rep1 ZipList a -> ZipList a forall a. ZipList a -> Rep1 ZipList a forall k (f :: k -> *). (forall (a :: k). f a -> Rep1 f a) -> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f $cto1 :: forall a. Rep1 ZipList a -> ZipList a $cfrom1 :: forall a. ZipList a -> Rep1 ZipList a Generic1 )
instance Applicative ZipList where pure :: forall a. a -> ZipList a pure a x = [a] -> ZipList a forall a. [a] -> ZipList a ZipList (a -> [a] forall a. a -> [a] repeat a x) liftA2 :: forall a b c. (a -> b -> c) -> ZipList a -> ZipList b -> ZipList c liftA2 a -> b -> c f (ZipList [a] xs) (ZipList [b] ys) = [c] -> ZipList c forall a. [a] -> ZipList a ZipList ((a -> b -> c) -> [a] -> [b] -> [c] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith a -> b -> c f [a] xs [b] ys)
instance Alternative ZipList where empty :: forall a. ZipList a empty = [a] -> ZipList a forall a. [a] -> ZipList a ZipList [] ZipList [a] xs <|> :: forall a. ZipList a -> ZipList a -> ZipList a <|> ZipList [a] ys = [a] -> ZipList a forall a. [a] -> ZipList a ZipList ([a] xs [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ Int -> [a] -> [a] forall a. Int -> [a] -> [a] drop ([a] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length [a] xs) [a] ys)
optional :: Alternative f => f a -> f (Maybe a) optional :: forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a) optional f a v = a -> Maybe a forall a. a -> Maybe a Just (a -> Maybe a) -> f a -> f (Maybe a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> f a v f (Maybe a) -> f (Maybe a) -> f (Maybe a) forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Maybe a -> f (Maybe a) forall (f :: * -> *) a. Applicative f => a -> f a pure Maybe a forall a. Maybe a Nothing