(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),
) where

import 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