{-# LANGUAGE CPP, GADTs, InstanceSigs, KindSignatures, PatternSynonyms #-}
{-# LANGUAGE RankNTypes, RoleAnnotations, ScopedTypeVariables          #-}
{-# LANGUAGE StandaloneDeriving, TemplateHaskell, TypeApplications     #-}
{-# LANGUAGE TypeFamilies, TypeOperators, UndecidableSuperClasses      #-}
module Control.Subcategory.Wrapper.Internal where
import Control.Applicative
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 808
import Control.Monad.Fail
#endif
import Control.Monad.Fix    (MonadFix)
import Control.Monad.Zip    (MonadZip)
import Data.Coerce
import Data.Kind            (Type)
import Data.MonoTraversable
import Data.Pointed
import Data.Semialign       (Align, Unalign)
import Data.Zip             (Semialign, Unzip, Zip)
import GHC.Base             (MonadPlus)

newtype WrapFunctor f (a :: Type) = WrapFunctor {WrapFunctor f a -> f a
runFunctor :: f a}
  deriving newtype (a -> WrapFunctor f b -> WrapFunctor f a
(a -> b) -> WrapFunctor f a -> WrapFunctor f b
(forall a b. (a -> b) -> WrapFunctor f a -> WrapFunctor f b)
-> (forall a b. a -> WrapFunctor f b -> WrapFunctor f a)
-> Functor (WrapFunctor f)
forall a b. a -> WrapFunctor f b -> WrapFunctor f a
forall a b. (a -> b) -> WrapFunctor f a -> WrapFunctor f b
forall (f :: * -> *) a b.
Functor f =>
a -> WrapFunctor f b -> WrapFunctor f a
forall (f :: * -> *) a b.
Functor f =>
(a -> b) -> WrapFunctor f a -> WrapFunctor f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> WrapFunctor f b -> WrapFunctor f a
$c<$ :: forall (f :: * -> *) a b.
Functor f =>
a -> WrapFunctor f b -> WrapFunctor f a
fmap :: (a -> b) -> WrapFunctor f a -> WrapFunctor f b
$cfmap :: forall (f :: * -> *) a b.
Functor f =>
(a -> b) -> WrapFunctor f a -> WrapFunctor f b
Functor, Functor (WrapFunctor f)
a -> WrapFunctor f a
Functor (WrapFunctor f)
-> (forall a. a -> WrapFunctor f a)
-> (forall a b.
    WrapFunctor f (a -> b) -> WrapFunctor f a -> WrapFunctor f b)
-> (forall a b c.
    (a -> b -> c)
    -> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c)
-> (forall a b.
    WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b)
-> (forall a b.
    WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f a)
-> Applicative (WrapFunctor f)
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f a
WrapFunctor f (a -> b) -> WrapFunctor f a -> WrapFunctor f b
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall a. a -> WrapFunctor f a
forall a b. WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f a
forall a b. WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
forall a b.
WrapFunctor f (a -> b) -> WrapFunctor f a -> WrapFunctor f b
forall a b c.
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
forall (f :: * -> *). Applicative f => Functor (WrapFunctor f)
forall (f :: * -> *) a. Applicative f => a -> WrapFunctor f a
forall (f :: * -> *) a b.
Applicative f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f a
forall (f :: * -> *) a b.
Applicative f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
forall (f :: * -> *) a b.
Applicative f =>
WrapFunctor f (a -> b) -> WrapFunctor f a -> WrapFunctor f b
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
<* :: WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f a
$c<* :: forall (f :: * -> *) a b.
Applicative f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f a
*> :: WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
$c*> :: forall (f :: * -> *) a b.
Applicative f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
liftA2 :: (a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
$cliftA2 :: forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
<*> :: WrapFunctor f (a -> b) -> WrapFunctor f a -> WrapFunctor f b
$c<*> :: forall (f :: * -> *) a b.
Applicative f =>
WrapFunctor f (a -> b) -> WrapFunctor f a -> WrapFunctor f b
pure :: a -> WrapFunctor f a
$cpure :: forall (f :: * -> *) a. Applicative f => a -> WrapFunctor f a
$cp1Applicative :: forall (f :: * -> *). Applicative f => Functor (WrapFunctor f)
Applicative, Applicative (WrapFunctor f)
WrapFunctor f a
Applicative (WrapFunctor f)
-> (forall a. WrapFunctor f a)
-> (forall a.
    WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a)
-> (forall a. WrapFunctor f a -> WrapFunctor f [a])
-> (forall a. WrapFunctor f a -> WrapFunctor f [a])
-> Alternative (WrapFunctor f)
WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
WrapFunctor f a -> WrapFunctor f [a]
WrapFunctor f a -> WrapFunctor f [a]
forall a. WrapFunctor f a
forall a. WrapFunctor f a -> WrapFunctor f [a]
forall a. WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
forall (f :: * -> *).
Applicative f
-> (forall a. f a)
-> (forall a. f a -> f a -> f a)
-> (forall a. f a -> f [a])
-> (forall a. f a -> f [a])
-> Alternative f
forall (f :: * -> *). Alternative f => Applicative (WrapFunctor f)
forall (f :: * -> *) a. Alternative f => WrapFunctor f a
forall (f :: * -> *) a.
Alternative f =>
WrapFunctor f a -> WrapFunctor f [a]
forall (f :: * -> *) a.
Alternative f =>
WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
many :: WrapFunctor f a -> WrapFunctor f [a]
$cmany :: forall (f :: * -> *) a.
Alternative f =>
WrapFunctor f a -> WrapFunctor f [a]
some :: WrapFunctor f a -> WrapFunctor f [a]
$csome :: forall (f :: * -> *) a.
Alternative f =>
WrapFunctor f a -> WrapFunctor f [a]
<|> :: WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
$c<|> :: forall (f :: * -> *) a.
Alternative f =>
WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
empty :: WrapFunctor f a
$cempty :: forall (f :: * -> *) a. Alternative f => WrapFunctor f a
$cp1Alternative :: forall (f :: * -> *). Alternative f => Applicative (WrapFunctor f)
Alternative, Applicative (WrapFunctor f)
a -> WrapFunctor f a
Applicative (WrapFunctor f)
-> (forall a b.
    WrapFunctor f a -> (a -> WrapFunctor f b) -> WrapFunctor f b)
-> (forall a b.
    WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b)
-> (forall a. a -> WrapFunctor f a)
-> Monad (WrapFunctor f)
WrapFunctor f a -> (a -> WrapFunctor f b) -> WrapFunctor f b
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
forall a. a -> WrapFunctor f a
forall a b. WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
forall a b.
WrapFunctor f a -> (a -> WrapFunctor f b) -> WrapFunctor f b
forall (f :: * -> *). Monad f => Applicative (WrapFunctor f)
forall (f :: * -> *) a. Monad f => a -> WrapFunctor f a
forall (f :: * -> *) a b.
Monad f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
forall (f :: * -> *) a b.
Monad f =>
WrapFunctor f a -> (a -> WrapFunctor f b) -> WrapFunctor f 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 :: a -> WrapFunctor f a
$creturn :: forall (f :: * -> *) a. Monad f => a -> WrapFunctor f a
>> :: WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
$c>> :: forall (f :: * -> *) a b.
Monad f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f b
>>= :: WrapFunctor f a -> (a -> WrapFunctor f b) -> WrapFunctor f b
$c>>= :: forall (f :: * -> *) a b.
Monad f =>
WrapFunctor f a -> (a -> WrapFunctor f b) -> WrapFunctor f b
$cp1Monad :: forall (f :: * -> *). Monad f => Applicative (WrapFunctor f)
Monad, a -> WrapFunctor f a -> Bool
WrapFunctor f m -> m
WrapFunctor f a -> [a]
WrapFunctor f a -> Bool
WrapFunctor f a -> Int
WrapFunctor f a -> a
WrapFunctor f a -> a
WrapFunctor f a -> a
WrapFunctor f a -> a
(a -> m) -> WrapFunctor f a -> m
(a -> m) -> WrapFunctor f a -> m
(a -> b -> b) -> b -> WrapFunctor f a -> b
(a -> b -> b) -> b -> WrapFunctor f a -> b
(b -> a -> b) -> b -> WrapFunctor f a -> b
(b -> a -> b) -> b -> WrapFunctor f a -> b
(a -> a -> a) -> WrapFunctor f a -> a
(a -> a -> a) -> WrapFunctor f a -> a
(forall m. Monoid m => WrapFunctor f m -> m)
-> (forall m a. Monoid m => (a -> m) -> WrapFunctor f a -> m)
-> (forall m a. Monoid m => (a -> m) -> WrapFunctor f a -> m)
-> (forall a b. (a -> b -> b) -> b -> WrapFunctor f a -> b)
-> (forall a b. (a -> b -> b) -> b -> WrapFunctor f a -> b)
-> (forall b a. (b -> a -> b) -> b -> WrapFunctor f a -> b)
-> (forall b a. (b -> a -> b) -> b -> WrapFunctor f a -> b)
-> (forall a. (a -> a -> a) -> WrapFunctor f a -> a)
-> (forall a. (a -> a -> a) -> WrapFunctor f a -> a)
-> (forall a. WrapFunctor f a -> [a])
-> (forall a. WrapFunctor f a -> Bool)
-> (forall a. WrapFunctor f a -> Int)
-> (forall a. Eq a => a -> WrapFunctor f a -> Bool)
-> (forall a. Ord a => WrapFunctor f a -> a)
-> (forall a. Ord a => WrapFunctor f a -> a)
-> (forall a. Num a => WrapFunctor f a -> a)
-> (forall a. Num a => WrapFunctor f a -> a)
-> Foldable (WrapFunctor f)
forall a. Eq a => a -> WrapFunctor f a -> Bool
forall a. Num a => WrapFunctor f a -> a
forall a. Ord a => WrapFunctor f a -> a
forall m. Monoid m => WrapFunctor f m -> m
forall a. WrapFunctor f a -> Bool
forall a. WrapFunctor f a -> Int
forall a. WrapFunctor f a -> [a]
forall a. (a -> a -> a) -> WrapFunctor f a -> a
forall m a. Monoid m => (a -> m) -> WrapFunctor f a -> m
forall b a. (b -> a -> b) -> b -> WrapFunctor f a -> b
forall a b. (a -> b -> b) -> b -> WrapFunctor f a -> b
forall (f :: * -> *) a.
(Foldable f, Eq a) =>
a -> WrapFunctor f a -> Bool
forall (f :: * -> *) a. (Foldable f, Num a) => WrapFunctor f a -> a
forall (f :: * -> *) a. (Foldable f, Ord a) => WrapFunctor f a -> a
forall (f :: * -> *) m.
(Foldable f, Monoid m) =>
WrapFunctor f m -> m
forall (f :: * -> *) a. Foldable f => WrapFunctor f a -> Bool
forall (f :: * -> *) a. Foldable f => WrapFunctor f a -> Int
forall (f :: * -> *) a. Foldable f => WrapFunctor f a -> [a]
forall (f :: * -> *) a.
Foldable f =>
(a -> a -> a) -> WrapFunctor f a -> a
forall (f :: * -> *) m a.
(Foldable f, Monoid m) =>
(a -> m) -> WrapFunctor f a -> m
forall (f :: * -> *) b a.
Foldable f =>
(b -> a -> b) -> b -> WrapFunctor f a -> b
forall (f :: * -> *) a b.
Foldable f =>
(a -> b -> b) -> b -> WrapFunctor f 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 :: WrapFunctor f a -> a
$cproduct :: forall (f :: * -> *) a. (Foldable f, Num a) => WrapFunctor f a -> a
sum :: WrapFunctor f a -> a
$csum :: forall (f :: * -> *) a. (Foldable f, Num a) => WrapFunctor f a -> a
minimum :: WrapFunctor f a -> a
$cminimum :: forall (f :: * -> *) a. (Foldable f, Ord a) => WrapFunctor f a -> a
maximum :: WrapFunctor f a -> a
$cmaximum :: forall (f :: * -> *) a. (Foldable f, Ord a) => WrapFunctor f a -> a
elem :: a -> WrapFunctor f a -> Bool
$celem :: forall (f :: * -> *) a.
(Foldable f, Eq a) =>
a -> WrapFunctor f a -> Bool
length :: WrapFunctor f a -> Int
$clength :: forall (f :: * -> *) a. Foldable f => WrapFunctor f a -> Int
null :: WrapFunctor f a -> Bool
$cnull :: forall (f :: * -> *) a. Foldable f => WrapFunctor f a -> Bool
toList :: WrapFunctor f a -> [a]
$ctoList :: forall (f :: * -> *) a. Foldable f => WrapFunctor f a -> [a]
foldl1 :: (a -> a -> a) -> WrapFunctor f a -> a
$cfoldl1 :: forall (f :: * -> *) a.
Foldable f =>
(a -> a -> a) -> WrapFunctor f a -> a
foldr1 :: (a -> a -> a) -> WrapFunctor f a -> a
$cfoldr1 :: forall (f :: * -> *) a.
Foldable f =>
(a -> a -> a) -> WrapFunctor f a -> a
foldl' :: (b -> a -> b) -> b -> WrapFunctor f a -> b
$cfoldl' :: forall (f :: * -> *) b a.
Foldable f =>
(b -> a -> b) -> b -> WrapFunctor f a -> b
foldl :: (b -> a -> b) -> b -> WrapFunctor f a -> b
$cfoldl :: forall (f :: * -> *) b a.
Foldable f =>
(b -> a -> b) -> b -> WrapFunctor f a -> b
foldr' :: (a -> b -> b) -> b -> WrapFunctor f a -> b
$cfoldr' :: forall (f :: * -> *) a b.
Foldable f =>
(a -> b -> b) -> b -> WrapFunctor f a -> b
foldr :: (a -> b -> b) -> b -> WrapFunctor f a -> b
$cfoldr :: forall (f :: * -> *) a b.
Foldable f =>
(a -> b -> b) -> b -> WrapFunctor f a -> b
foldMap' :: (a -> m) -> WrapFunctor f a -> m
$cfoldMap' :: forall (f :: * -> *) m a.
(Foldable f, Monoid m) =>
(a -> m) -> WrapFunctor f a -> m
foldMap :: (a -> m) -> WrapFunctor f a -> m
$cfoldMap :: forall (f :: * -> *) m a.
(Foldable f, Monoid m) =>
(a -> m) -> WrapFunctor f a -> m
fold :: WrapFunctor f m -> m
$cfold :: forall (f :: * -> *) m.
(Foldable f, Monoid m) =>
WrapFunctor f m -> m
Foldable)
  deriving newtype (Monad (WrapFunctor f)
Alternative (WrapFunctor f)
WrapFunctor f a
Alternative (WrapFunctor f)
-> Monad (WrapFunctor f)
-> (forall a. WrapFunctor f a)
-> (forall a.
    WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a)
-> MonadPlus (WrapFunctor f)
WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
forall a. WrapFunctor f a
forall a. WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
forall (m :: * -> *).
Alternative m
-> Monad m
-> (forall a. m a)
-> (forall a. m a -> m a -> m a)
-> MonadPlus m
forall (f :: * -> *). MonadPlus f => Monad (WrapFunctor f)
forall (f :: * -> *). MonadPlus f => Alternative (WrapFunctor f)
forall (f :: * -> *) a. MonadPlus f => WrapFunctor f a
forall (f :: * -> *) a.
MonadPlus f =>
WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
mplus :: WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
$cmplus :: forall (f :: * -> *) a.
MonadPlus f =>
WrapFunctor f a -> WrapFunctor f a -> WrapFunctor f a
mzero :: WrapFunctor f a
$cmzero :: forall (f :: * -> *) a. MonadPlus f => WrapFunctor f a
$cp2MonadPlus :: forall (f :: * -> *). MonadPlus f => Monad (WrapFunctor f)
$cp1MonadPlus :: forall (f :: * -> *). MonadPlus f => Alternative (WrapFunctor f)
MonadPlus, Monad (WrapFunctor f)
Monad (WrapFunctor f)
-> (forall a. (a -> WrapFunctor f a) -> WrapFunctor f a)
-> MonadFix (WrapFunctor f)
(a -> WrapFunctor f a) -> WrapFunctor f a
forall a. (a -> WrapFunctor f a) -> WrapFunctor f a
forall (m :: * -> *).
Monad m -> (forall a. (a -> m a) -> m a) -> MonadFix m
forall (f :: * -> *). MonadFix f => Monad (WrapFunctor f)
forall (f :: * -> *) a.
MonadFix f =>
(a -> WrapFunctor f a) -> WrapFunctor f a
mfix :: (a -> WrapFunctor f a) -> WrapFunctor f a
$cmfix :: forall (f :: * -> *) a.
MonadFix f =>
(a -> WrapFunctor f a) -> WrapFunctor f a
$cp1MonadFix :: forall (f :: * -> *). MonadFix f => Monad (WrapFunctor f)
MonadFix, Monad (WrapFunctor f)
Monad (WrapFunctor f)
-> (forall a. String -> WrapFunctor f a)
-> MonadFail (WrapFunctor f)
String -> WrapFunctor f a
forall a. String -> WrapFunctor f a
forall (m :: * -> *).
Monad m -> (forall a. String -> m a) -> MonadFail m
forall (f :: * -> *). MonadFail f => Monad (WrapFunctor f)
forall (f :: * -> *) a. MonadFail f => String -> WrapFunctor f a
fail :: String -> WrapFunctor f a
$cfail :: forall (f :: * -> *) a. MonadFail f => String -> WrapFunctor f a
$cp1MonadFail :: forall (f :: * -> *). MonadFail f => Monad (WrapFunctor f)
MonadFail)
  deriving newtype (a -> WrapFunctor f a
(forall a. a -> WrapFunctor f a) -> Pointed (WrapFunctor f)
forall a. a -> WrapFunctor f a
forall (f :: * -> *) a. Pointed f => a -> WrapFunctor f a
forall (p :: * -> *). (forall a. a -> p a) -> Pointed p
point :: a -> WrapFunctor f a
$cpoint :: forall (f :: * -> *) a. Pointed f => a -> WrapFunctor f a
Pointed, Monad (WrapFunctor f)
Monad (WrapFunctor f)
-> (forall a b.
    WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b))
-> (forall a b c.
    (a -> b -> c)
    -> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c)
-> (forall a b.
    WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b))
-> MonadZip (WrapFunctor f)
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall a b.
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
forall a b.
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
forall a b c.
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall (m :: * -> *).
Monad m
-> (forall a b. m a -> m b -> m (a, b))
-> (forall a b c. (a -> b -> c) -> m a -> m b -> m c)
-> (forall a b. m (a, b) -> (m a, m b))
-> MonadZip m
forall (f :: * -> *). MonadZip f => Monad (WrapFunctor f)
forall (f :: * -> *) a b.
MonadZip f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
forall (f :: * -> *) a b.
MonadZip f =>
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
forall (f :: * -> *) a b c.
MonadZip f =>
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
munzip :: WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
$cmunzip :: forall (f :: * -> *) a b.
MonadZip f =>
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
mzipWith :: (a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
$cmzipWith :: forall (f :: * -> *) a b c.
MonadZip f =>
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
mzip :: WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
$cmzip :: forall (f :: * -> *) a b.
MonadZip f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
$cp1MonadZip :: forall (f :: * -> *). MonadZip f => Monad (WrapFunctor f)
MonadZip, Semialign (WrapFunctor f)
Semialign (WrapFunctor f)
-> (forall a b.
    WrapFunctor f (These a b) -> (WrapFunctor f a, WrapFunctor f b))
-> (forall c a b.
    (c -> These a b)
    -> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b))
-> Unalign (WrapFunctor f)
WrapFunctor f (These a b) -> (WrapFunctor f a, WrapFunctor f b)
(c -> These a b)
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
forall a b.
WrapFunctor f (These a b) -> (WrapFunctor f a, WrapFunctor f b)
forall c a b.
(c -> These a b)
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
forall (f :: * -> *).
Semialign f
-> (forall a b. f (These a b) -> (f a, f b))
-> (forall c a b. (c -> These a b) -> f c -> (f a, f b))
-> Unalign f
forall (f :: * -> *). Unalign f => Semialign (WrapFunctor f)
forall (f :: * -> *) a b.
Unalign f =>
WrapFunctor f (These a b) -> (WrapFunctor f a, WrapFunctor f b)
forall (f :: * -> *) c a b.
Unalign f =>
(c -> These a b)
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
unalignWith :: (c -> These a b)
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
$cunalignWith :: forall (f :: * -> *) c a b.
Unalign f =>
(c -> These a b)
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
unalign :: WrapFunctor f (These a b) -> (WrapFunctor f a, WrapFunctor f b)
$cunalign :: forall (f :: * -> *) a b.
Unalign f =>
WrapFunctor f (These a b) -> (WrapFunctor f a, WrapFunctor f b)
$cp1Unalign :: forall (f :: * -> *). Unalign f => Semialign (WrapFunctor f)
Unalign, Semialign (WrapFunctor f)
WrapFunctor f a
Semialign (WrapFunctor f)
-> (forall a. WrapFunctor f a) -> Align (WrapFunctor f)
forall a. WrapFunctor f a
forall (f :: * -> *). Semialign f -> (forall a. f a) -> Align f
forall (f :: * -> *). Align f => Semialign (WrapFunctor f)
forall (f :: * -> *) a. Align f => WrapFunctor f a
nil :: WrapFunctor f a
$cnil :: forall (f :: * -> *) a. Align f => WrapFunctor f a
$cp1Align :: forall (f :: * -> *). Align f => Semialign (WrapFunctor f)
Align, Functor (WrapFunctor f)
Functor (WrapFunctor f)
-> (forall a b.
    WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (These a b))
-> (forall a b c.
    (These a b -> c)
    -> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c)
-> Semialign (WrapFunctor f)
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (These a b)
(These a b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall a b.
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (These a b)
forall a b c.
(These a b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall (f :: * -> *).
Functor f
-> (forall a b. f a -> f b -> f (These a b))
-> (forall a b c. (These a b -> c) -> f a -> f b -> f c)
-> Semialign f
forall (f :: * -> *). Semialign f => Functor (WrapFunctor f)
forall (f :: * -> *) a b.
Semialign f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (These a b)
forall (f :: * -> *) a b c.
Semialign f =>
(These a b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
alignWith :: (These a b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
$calignWith :: forall (f :: * -> *) a b c.
Semialign f =>
(These a b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
align :: WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (These a b)
$calign :: forall (f :: * -> *) a b.
Semialign f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (These a b)
$cp1Semialign :: forall (f :: * -> *). Semialign f => Functor (WrapFunctor f)
Semialign, Semialign (WrapFunctor f)
Semialign (WrapFunctor f)
-> (forall a b.
    WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b))
-> (forall a b c.
    (a -> b -> c)
    -> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c)
-> Zip (WrapFunctor f)
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall a b.
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
forall a b c.
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
forall (f :: * -> *).
Semialign f
-> (forall a b. f a -> f b -> f (a, b))
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> Zip f
forall (f :: * -> *). Zip f => Semialign (WrapFunctor f)
forall (f :: * -> *) a b.
Zip f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
forall (f :: * -> *) a b c.
Zip f =>
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
zipWith :: (a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
$czipWith :: forall (f :: * -> *) a b c.
Zip f =>
(a -> b -> c)
-> WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f c
zip :: WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
$czip :: forall (f :: * -> *) a b.
Zip f =>
WrapFunctor f a -> WrapFunctor f b -> WrapFunctor f (a, b)
$cp1Zip :: forall (f :: * -> *). Zip f => Semialign (WrapFunctor f)
Zip,  Zip (WrapFunctor f)
Zip (WrapFunctor f)
-> (forall c a b.
    (c -> (a, b))
    -> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b))
-> (forall a b.
    WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b))
-> Unzip (WrapFunctor f)
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
(c -> (a, b))
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
forall a b.
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
forall c a b.
(c -> (a, b))
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
forall (f :: * -> *).
Zip f
-> (forall c a b. (c -> (a, b)) -> f c -> (f a, f b))
-> (forall a b. f (a, b) -> (f a, f b))
-> Unzip f
forall (f :: * -> *). Unzip f => Zip (WrapFunctor f)
forall (f :: * -> *) a b.
Unzip f =>
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
forall (f :: * -> *) c a b.
Unzip f =>
(c -> (a, b))
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
unzip :: WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
$cunzip :: forall (f :: * -> *) a b.
Unzip f =>
WrapFunctor f (a, b) -> (WrapFunctor f a, WrapFunctor f b)
unzipWith :: (c -> (a, b))
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
$cunzipWith :: forall (f :: * -> *) c a b.
Unzip f =>
(c -> (a, b))
-> WrapFunctor f c -> (WrapFunctor f a, WrapFunctor f b)
$cp1Unzip :: forall (f :: * -> *). Unzip f => Zip (WrapFunctor f)
Unzip)

instance Traversable f => Traversable (WrapFunctor f) where
  traverse :: (a -> f b) -> WrapFunctor f a -> f (WrapFunctor f b)
traverse a -> f b
f = (f b -> WrapFunctor f b) -> f (f b) -> f (WrapFunctor f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f b -> WrapFunctor f b
forall (f :: * -> *) a. f a -> WrapFunctor f a
WrapFunctor (f (f b) -> f (WrapFunctor f b))
-> (WrapFunctor f a -> f (f b))
-> WrapFunctor f a
-> f (WrapFunctor f b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f b) -> f a -> f (f b)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse a -> f b
f (f a -> f (f b))
-> (WrapFunctor f a -> f a) -> WrapFunctor f a -> f (f b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WrapFunctor f a -> f a
forall (f :: * -> *) a. WrapFunctor f a -> f a
runFunctor


type role WrapMono representational nominal
-- | Similar to 'WrappedMono' from @mono-traversable,
--   but uses @newtype@ instaed of GADTs, which is efficient.
--   To restrict the construction, we hide genuine constructor
--   and expose the constrained pattern synonym 'WrapMono' and
--   specifies type roles tightly (note: the role for @mono@
--   should NOT be representational honestly; indeed, @WrapMono mono a@
--   could be coerced to @WrapMono mono' a@ iff @mono@ and @mono' are
--   representationally equivalent __AND__ @Element a ~ Element a@.)
newtype WrapMono mono b = WrapMono' mono
  deriving newtype (Eq (Element (WrapMono mono b)) =>
Element (WrapMono mono b) -> WrapMono mono b -> Bool
Element (WrapMono mono b) -> WrapMono mono b -> Bool
WrapMono mono b -> Bool
WrapMono mono b -> Int
WrapMono mono b -> Int64
WrapMono mono b -> [Element (WrapMono mono b)]
WrapMono mono b -> Element (WrapMono mono b)
WrapMono mono b -> i -> Ordering
WrapMono mono b -> (Element (WrapMono mono b) -> f b) -> f ()
WrapMono mono b -> (Element (WrapMono mono b) -> m ()) -> m ()
(a -> Element (WrapMono mono b) -> a) -> a -> WrapMono mono b -> a
(a -> Element (WrapMono mono b) -> m a)
-> a -> WrapMono mono b -> m a
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
(Element (WrapMono mono b) -> f b) -> WrapMono mono b -> f ()
(Element (WrapMono mono b) -> m ()) -> WrapMono mono b -> m ()
(Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool
(Element (WrapMono mono b) -> b -> b) -> b -> WrapMono mono b -> b
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Ordering)
-> WrapMono mono b -> Element (WrapMono mono b)
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> Element (WrapMono mono b)
(forall m.
 Monoid m =>
 (Element (WrapMono mono b) -> m) -> WrapMono mono b -> m)
-> (forall b.
    (Element (WrapMono mono b) -> b -> b) -> b -> WrapMono mono b -> b)
-> (forall a.
    (a -> Element (WrapMono mono b) -> a) -> a -> WrapMono mono b -> a)
-> (WrapMono mono b -> [Element (WrapMono mono b)])
-> ((Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool)
-> ((Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool)
-> (WrapMono mono b -> Bool)
-> (WrapMono mono b -> Int)
-> (WrapMono mono b -> Int64)
-> (forall i. Integral i => WrapMono mono b -> i -> Ordering)
-> (forall (f :: * -> *) b.
    Applicative f =>
    (Element (WrapMono mono b) -> f b) -> WrapMono mono b -> f ())
-> (forall (f :: * -> *) b.
    Applicative f =>
    WrapMono mono b -> (Element (WrapMono mono b) -> f b) -> f ())
-> (forall (m :: * -> *).
    Applicative m =>
    (Element (WrapMono mono b) -> m ()) -> WrapMono mono b -> m ())
-> (forall (m :: * -> *).
    Applicative m =>
    WrapMono mono b -> (Element (WrapMono mono b) -> m ()) -> m ())
-> (forall (m :: * -> *) a.
    Monad m =>
    (a -> Element (WrapMono mono b) -> m a)
    -> a -> WrapMono mono b -> m a)
-> (forall m.
    Semigroup m =>
    (Element (WrapMono mono b) -> m) -> WrapMono mono b -> m)
-> ((Element (WrapMono mono b)
     -> Element (WrapMono mono b) -> Element (WrapMono mono b))
    -> WrapMono mono b -> Element (WrapMono mono b))
-> ((Element (WrapMono mono b)
     -> Element (WrapMono mono b) -> Element (WrapMono mono b))
    -> WrapMono mono b -> Element (WrapMono mono b))
-> (WrapMono mono b -> Element (WrapMono mono b))
-> (WrapMono mono b -> Element (WrapMono mono b))
-> (WrapMono mono b -> Element (WrapMono mono b))
-> (WrapMono mono b -> Element (WrapMono mono b))
-> ((Element (WrapMono mono b)
     -> Element (WrapMono mono b) -> Ordering)
    -> WrapMono mono b -> Element (WrapMono mono b))
-> ((Element (WrapMono mono b)
     -> Element (WrapMono mono b) -> Ordering)
    -> WrapMono mono b -> Element (WrapMono mono b))
-> (Eq (Element (WrapMono mono b)) =>
    Element (WrapMono mono b) -> WrapMono mono b -> Bool)
-> (Eq (Element (WrapMono mono b)) =>
    Element (WrapMono mono b) -> WrapMono mono b -> Bool)
-> MonoFoldable (WrapMono mono b)
forall i. Integral i => WrapMono mono b -> i -> Ordering
forall m.
Semigroup m =>
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
forall m.
Monoid m =>
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
forall a.
(a -> Element (WrapMono mono b) -> a) -> a -> WrapMono mono b -> a
forall b.
(Element (WrapMono mono b) -> b -> b) -> b -> WrapMono mono b -> b
forall mono.
(forall m. Monoid m => (Element mono -> m) -> mono -> m)
-> (forall b. (Element mono -> b -> b) -> b -> mono -> b)
-> (forall a. (a -> Element mono -> a) -> a -> mono -> a)
-> (mono -> [Element mono])
-> ((Element mono -> Bool) -> mono -> Bool)
-> ((Element mono -> Bool) -> mono -> Bool)
-> (mono -> Bool)
-> (mono -> Int)
-> (mono -> Int64)
-> (forall i. Integral i => mono -> i -> Ordering)
-> (forall (f :: * -> *) b.
    Applicative f =>
    (Element mono -> f b) -> mono -> f ())
-> (forall (f :: * -> *) b.
    Applicative f =>
    mono -> (Element mono -> f b) -> f ())
-> (forall (m :: * -> *).
    Applicative m =>
    (Element mono -> m ()) -> mono -> m ())
-> (forall (m :: * -> *).
    Applicative m =>
    mono -> (Element mono -> m ()) -> m ())
-> (forall (m :: * -> *) a.
    Monad m =>
    (a -> Element mono -> m a) -> a -> mono -> m a)
-> (forall m. Semigroup m => (Element mono -> m) -> mono -> m)
-> ((Element mono -> Element mono -> Element mono)
    -> mono -> Element mono)
-> ((Element mono -> Element mono -> Element mono)
    -> mono -> Element mono)
-> (mono -> Element mono)
-> (mono -> Element mono)
-> (mono -> Element mono)
-> (mono -> Element mono)
-> ((Element mono -> Element mono -> Ordering)
    -> mono -> Element mono)
-> ((Element mono -> Element mono -> Ordering)
    -> mono -> Element mono)
-> (Eq (Element mono) => Element mono -> mono -> Bool)
-> (Eq (Element mono) => Element mono -> mono -> Bool)
-> MonoFoldable mono
forall mono k (b :: k).
(MonoFoldable mono, Eq (Element (WrapMono mono b))) =>
Element (WrapMono mono b) -> WrapMono mono b -> Bool
forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Bool
forall mono k (b :: k). MonoFoldable mono => WrapMono mono b -> Int
forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Int64
forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> [Element (WrapMono mono b)]
forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Element (WrapMono mono b)
forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool
forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Ordering)
-> WrapMono mono b -> Element (WrapMono mono b)
forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> Element (WrapMono mono b)
forall mono k (b :: k) i.
(MonoFoldable mono, Integral i) =>
WrapMono mono b -> i -> Ordering
forall mono k (b :: k) m.
(MonoFoldable mono, Semigroup m) =>
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
forall mono k (b :: k) m.
(MonoFoldable mono, Monoid m) =>
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
forall mono k (b :: k) a.
MonoFoldable mono =>
(a -> Element (WrapMono mono b) -> a) -> a -> WrapMono mono b -> a
forall mono k (b :: k) b.
MonoFoldable mono =>
(Element (WrapMono mono b) -> b -> b) -> b -> WrapMono mono b -> b
forall mono k (b :: k) (m :: * -> *).
(MonoFoldable mono, Applicative m) =>
WrapMono mono b -> (Element (WrapMono mono b) -> m ()) -> m ()
forall mono k (b :: k) (m :: * -> *).
(MonoFoldable mono, Applicative m) =>
(Element (WrapMono mono b) -> m ()) -> WrapMono mono b -> m ()
forall mono k (b :: k) (m :: * -> *) a.
(MonoFoldable mono, Monad m) =>
(a -> Element (WrapMono mono b) -> m a)
-> a -> WrapMono mono b -> m a
forall mono k (b :: k) (f :: * -> *) b.
(MonoFoldable mono, Applicative f) =>
WrapMono mono b -> (Element (WrapMono mono b) -> f b) -> f ()
forall mono k (b :: k) (f :: * -> *) b.
(MonoFoldable mono, Applicative f) =>
(Element (WrapMono mono b) -> f b) -> WrapMono mono b -> f ()
forall (m :: * -> *).
Applicative m =>
WrapMono mono b -> (Element (WrapMono mono b) -> m ()) -> m ()
forall (m :: * -> *).
Applicative m =>
(Element (WrapMono mono b) -> m ()) -> WrapMono mono b -> m ()
forall (m :: * -> *) a.
Monad m =>
(a -> Element (WrapMono mono b) -> m a)
-> a -> WrapMono mono b -> m a
forall (f :: * -> *) b.
Applicative f =>
WrapMono mono b -> (Element (WrapMono mono b) -> f b) -> f ()
forall (f :: * -> *) b.
Applicative f =>
(Element (WrapMono mono b) -> f b) -> WrapMono mono b -> f ()
onotElem :: Element (WrapMono mono b) -> WrapMono mono b -> Bool
$conotElem :: forall mono k (b :: k).
(MonoFoldable mono, Eq (Element (WrapMono mono b))) =>
Element (WrapMono mono b) -> WrapMono mono b -> Bool
oelem :: Element (WrapMono mono b) -> WrapMono mono b -> Bool
$coelem :: forall mono k (b :: k).
(MonoFoldable mono, Eq (Element (WrapMono mono b))) =>
Element (WrapMono mono b) -> WrapMono mono b -> Bool
minimumByEx :: (Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Ordering)
-> WrapMono mono b -> Element (WrapMono mono b)
$cminimumByEx :: forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Ordering)
-> WrapMono mono b -> Element (WrapMono mono b)
maximumByEx :: (Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Ordering)
-> WrapMono mono b -> Element (WrapMono mono b)
$cmaximumByEx :: forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Ordering)
-> WrapMono mono b -> Element (WrapMono mono b)
unsafeLast :: WrapMono mono b -> Element (WrapMono mono b)
$cunsafeLast :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Element (WrapMono mono b)
unsafeHead :: WrapMono mono b -> Element (WrapMono mono b)
$cunsafeHead :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Element (WrapMono mono b)
lastEx :: WrapMono mono b -> Element (WrapMono mono b)
$clastEx :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Element (WrapMono mono b)
headEx :: WrapMono mono b -> Element (WrapMono mono b)
$cheadEx :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Element (WrapMono mono b)
ofoldl1Ex' :: (Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> Element (WrapMono mono b)
$cofoldl1Ex' :: forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> Element (WrapMono mono b)
ofoldr1Ex :: (Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> Element (WrapMono mono b)
$cofoldr1Ex :: forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b)
 -> Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> Element (WrapMono mono b)
ofoldMap1Ex :: (Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
$cofoldMap1Ex :: forall mono k (b :: k) m.
(MonoFoldable mono, Semigroup m) =>
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
ofoldlM :: (a -> Element (WrapMono mono b) -> m a)
-> a -> WrapMono mono b -> m a
$cofoldlM :: forall mono k (b :: k) (m :: * -> *) a.
(MonoFoldable mono, Monad m) =>
(a -> Element (WrapMono mono b) -> m a)
-> a -> WrapMono mono b -> m a
oforM_ :: WrapMono mono b -> (Element (WrapMono mono b) -> m ()) -> m ()
$coforM_ :: forall mono k (b :: k) (m :: * -> *).
(MonoFoldable mono, Applicative m) =>
WrapMono mono b -> (Element (WrapMono mono b) -> m ()) -> m ()
omapM_ :: (Element (WrapMono mono b) -> m ()) -> WrapMono mono b -> m ()
$comapM_ :: forall mono k (b :: k) (m :: * -> *).
(MonoFoldable mono, Applicative m) =>
(Element (WrapMono mono b) -> m ()) -> WrapMono mono b -> m ()
ofor_ :: WrapMono mono b -> (Element (WrapMono mono b) -> f b) -> f ()
$cofor_ :: forall mono k (b :: k) (f :: * -> *) b.
(MonoFoldable mono, Applicative f) =>
WrapMono mono b -> (Element (WrapMono mono b) -> f b) -> f ()
otraverse_ :: (Element (WrapMono mono b) -> f b) -> WrapMono mono b -> f ()
$cotraverse_ :: forall mono k (b :: k) (f :: * -> *) b.
(MonoFoldable mono, Applicative f) =>
(Element (WrapMono mono b) -> f b) -> WrapMono mono b -> f ()
ocompareLength :: WrapMono mono b -> i -> Ordering
$cocompareLength :: forall mono k (b :: k) i.
(MonoFoldable mono, Integral i) =>
WrapMono mono b -> i -> Ordering
olength64 :: WrapMono mono b -> Int64
$colength64 :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Int64
olength :: WrapMono mono b -> Int
$colength :: forall mono k (b :: k). MonoFoldable mono => WrapMono mono b -> Int
onull :: WrapMono mono b -> Bool
$conull :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> Bool
oany :: (Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool
$coany :: forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool
oall :: (Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool
$coall :: forall mono k (b :: k).
MonoFoldable mono =>
(Element (WrapMono mono b) -> Bool) -> WrapMono mono b -> Bool
otoList :: WrapMono mono b -> [Element (WrapMono mono b)]
$cotoList :: forall mono k (b :: k).
MonoFoldable mono =>
WrapMono mono b -> [Element (WrapMono mono b)]
ofoldl' :: (a -> Element (WrapMono mono b) -> a) -> a -> WrapMono mono b -> a
$cofoldl' :: forall mono k (b :: k) a.
MonoFoldable mono =>
(a -> Element (WrapMono mono b) -> a) -> a -> WrapMono mono b -> a
ofoldr :: (Element (WrapMono mono b) -> b -> b) -> b -> WrapMono mono b -> b
$cofoldr :: forall mono k (b :: k) b.
MonoFoldable mono =>
(Element (WrapMono mono b) -> b -> b) -> b -> WrapMono mono b -> b
ofoldMap :: (Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
$cofoldMap :: forall mono k (b :: k) m.
(MonoFoldable mono, Monoid m) =>
(Element (WrapMono mono b) -> m) -> WrapMono mono b -> m
MonoFoldable, (Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> WrapMono mono b
((Element (WrapMono mono b) -> Element (WrapMono mono b))
 -> WrapMono mono b -> WrapMono mono b)
-> MonoFunctor (WrapMono mono b)
forall mono.
((Element mono -> Element mono) -> mono -> mono)
-> MonoFunctor mono
forall mono k (b :: k).
MonoFunctor mono =>
(Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> WrapMono mono b
omap :: (Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> WrapMono mono b
$comap :: forall mono k (b :: k).
MonoFunctor mono =>
(Element (WrapMono mono b) -> Element (WrapMono mono b))
-> WrapMono mono b -> WrapMono mono b
MonoFunctor, Semigroup (WrapMono mono b)
WrapMono mono b
Semigroup (WrapMono mono b)
-> WrapMono mono b
-> (WrapMono mono b -> WrapMono mono b -> WrapMono mono b)
-> ([WrapMono mono b] -> WrapMono mono b)
-> Monoid (WrapMono mono b)
[WrapMono mono b] -> WrapMono mono b
WrapMono mono b -> WrapMono mono b -> WrapMono mono b
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall mono k (b :: k). Monoid mono => Semigroup (WrapMono mono b)
forall mono k (b :: k). Monoid mono => WrapMono mono b
forall mono k (b :: k).
Monoid mono =>
[WrapMono mono b] -> WrapMono mono b
forall mono k (b :: k).
Monoid mono =>
WrapMono mono b -> WrapMono mono b -> WrapMono mono b
mconcat :: [WrapMono mono b] -> WrapMono mono b
$cmconcat :: forall mono k (b :: k).
Monoid mono =>
[WrapMono mono b] -> WrapMono mono b
mappend :: WrapMono mono b -> WrapMono mono b -> WrapMono mono b
$cmappend :: forall mono k (b :: k).
Monoid mono =>
WrapMono mono b -> WrapMono mono b -> WrapMono mono b
mempty :: WrapMono mono b
$cmempty :: forall mono k (b :: k). Monoid mono => WrapMono mono b
$cp1Monoid :: forall mono k (b :: k). Monoid mono => Semigroup (WrapMono mono b)
Monoid, b -> WrapMono mono b -> WrapMono mono b
NonEmpty (WrapMono mono b) -> WrapMono mono b
WrapMono mono b -> WrapMono mono b -> WrapMono mono b
(WrapMono mono b -> WrapMono mono b -> WrapMono mono b)
-> (NonEmpty (WrapMono mono b) -> WrapMono mono b)
-> (forall b.
    Integral b =>
    b -> WrapMono mono b -> WrapMono mono b)
-> Semigroup (WrapMono mono b)
forall b. Integral b => b -> WrapMono mono b -> WrapMono mono b
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall mono k (b :: k).
Semigroup mono =>
NonEmpty (WrapMono mono b) -> WrapMono mono b
forall mono k (b :: k).
Semigroup mono =>
WrapMono mono b -> WrapMono mono b -> WrapMono mono b
forall mono k (b :: k) b.
(Semigroup mono, Integral b) =>
b -> WrapMono mono b -> WrapMono mono b
stimes :: b -> WrapMono mono b -> WrapMono mono b
$cstimes :: forall mono k (b :: k) b.
(Semigroup mono, Integral b) =>
b -> WrapMono mono b -> WrapMono mono b
sconcat :: NonEmpty (WrapMono mono b) -> WrapMono mono b
$csconcat :: forall mono k (b :: k).
Semigroup mono =>
NonEmpty (WrapMono mono b) -> WrapMono mono b
<> :: WrapMono mono b -> WrapMono mono b -> WrapMono mono b
$c<> :: forall mono k (b :: k).
Semigroup mono =>
WrapMono mono b -> WrapMono mono b -> WrapMono mono b
Semigroup, Element (WrapMono mono b) -> WrapMono mono b
(Element (WrapMono mono b) -> WrapMono mono b)
-> MonoPointed (WrapMono mono b)
forall mono. (Element mono -> mono) -> MonoPointed mono
forall mono k (b :: k).
MonoPointed mono =>
Element (WrapMono mono b) -> WrapMono mono b
opoint :: Element (WrapMono mono b) -> WrapMono mono b
$copoint :: forall mono k (b :: k).
MonoPointed mono =>
Element (WrapMono mono b) -> WrapMono mono b
MonoPointed)
  deriving newtype (MonoFoldable (WrapMono mono b)
MonoFoldable (WrapMono mono b) -> GrowingAppend (WrapMono mono b)
forall mono. MonoFoldable mono -> GrowingAppend mono
forall mono k (b :: k).
MonoFoldable mono =>
MonoFoldable (WrapMono mono b)
GrowingAppend)

type instance Element (WrapMono mono b) = Element mono

pattern WrapMono :: b ~ Element mono => b ~ Element mono => mono -> WrapMono mono b
pattern $bWrapMono :: mono -> WrapMono mono b
$mWrapMono :: forall r b mono.
(b ~ Element mono) =>
WrapMono mono b
-> ((b ~ Element mono) => mono -> r) -> (Void# -> r) -> r
WrapMono {WrapMono mono b -> (b ~ Element mono) => mono
unwrapMono} = WrapMono' unwrapMono

coerceToMono :: WrapMono mono (Element mono) -> mono
{-# INLINE coerceToMono #-}
coerceToMono :: WrapMono mono (Element mono) -> mono
coerceToMono = WrapMono mono (Element mono) -> mono
coerce

withMonoCoercible
  :: (Coercible (WrapMono mono (Element mono)) mono => r)
  -> r
{-# INLINE withMonoCoercible #-}
withMonoCoercible :: (Coercible (WrapMono mono (Element mono)) mono => r) -> r
withMonoCoercible = \Coercible (WrapMono mono (Element mono)) mono => r
x -> r
Coercible (WrapMono mono (Element mono)) mono => r
x