(original) (raw)
{-# LANGUAGE Safe #-} {-# LANGUAGE ScopedTypeVariables #-}
module Data.Bifoldable ( Bifoldable(..) , bifoldr' , bifoldr1 , bifoldrM , bifoldl' , bifoldl1 , bifoldlM , bitraverse_ , bifor_ , bimapM_ , biforM_ , bimsum , bisequenceA_ , bisequence_ , biasum , biList , binull , bilength , bielem , bimaximum , biminimum , bisum , biproduct , biconcat , biconcatMap , biand , bior , biany , biall , bimaximumBy , biminimumBy , binotElem , bifind ) where
import Control.Applicative import Data.Functor.Utils (Max(..), Min(..), (#.)) import Data.Maybe (fromMaybe) import Data.Monoid import GHC.Generics (K1(..))
class Bifoldable p where {-# MINIMAL bifoldr | bifoldMap #-}
bifold :: Monoid m => p m m -> m bifold = (m -> m) -> (m -> m) -> p m m -> m forall m a b. Monoid m => (a -> m) -> (b -> m) -> p a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap m -> m forall a. a -> a id m -> m forall a. a -> a id
bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> p a b -> m bifoldMap a -> m f b -> m g = (a -> m -> m) -> (b -> m -> m) -> m -> p a b -> m forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr (m -> m -> m forall a. Monoid a => a -> a -> a mappend (m -> m -> m) -> (a -> m) -> a -> m -> m forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> m f) (m -> m -> m forall a. Monoid a => a -> a -> a mappend (m -> m -> m) -> (b -> m) -> b -> m -> m forall b c a. (b -> c) -> (a -> b) -> a -> c . b -> m g) m forall a. Monoid a => a mempty
bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr a -> c -> c f b -> c -> c g c z p a b t = Endo c -> c -> c forall a. Endo a -> a -> a appEndo ((a -> Endo c) -> (b -> Endo c) -> p a b -> Endo c forall m a b. Monoid m => (a -> m) -> (b -> m) -> p a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap ((c -> c) -> Endo c forall a. (a -> a) -> Endo a Endo ((c -> c) -> Endo c) -> (a -> c -> c) -> a -> Endo c forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. a -> c -> c f) ((c -> c) -> Endo c forall a. (a -> a) -> Endo a Endo ((c -> c) -> Endo c) -> (b -> c -> c) -> b -> Endo c forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. b -> c -> c g) p a b t) c z
bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> p a b -> c bifoldl c -> a -> c f c -> b -> c g c z p a b t = Endo c -> c -> c forall a. Endo a -> a -> a appEndo (Dual (Endo c) -> Endo c forall a. Dual a -> a getDual ((a -> Dual (Endo c)) -> (b -> Dual (Endo c)) -> p a b -> Dual (Endo c) forall m a b. Monoid m => (a -> m) -> (b -> m) -> p a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap (Endo c -> Dual (Endo c) forall a. a -> Dual a Dual (Endo c -> Dual (Endo c)) -> (a -> Endo c) -> a -> Dual (Endo c) forall b c a. (b -> c) -> (a -> b) -> a -> c . (c -> c) -> Endo c forall a. (a -> a) -> Endo a Endo ((c -> c) -> Endo c) -> (a -> c -> c) -> a -> Endo c forall b c a. (b -> c) -> (a -> b) -> a -> c . (c -> a -> c) -> a -> c -> c forall a b c. (a -> b -> c) -> b -> a -> c flip c -> a -> c f) (Endo c -> Dual (Endo c) forall a. a -> Dual a Dual (Endo c -> Dual (Endo c)) -> (b -> Endo c) -> b -> Dual (Endo c) forall b c a. (b -> c) -> (a -> b) -> a -> c . (c -> c) -> Endo c forall a. (a -> a) -> Endo a Endo ((c -> c) -> Endo c) -> (b -> c -> c) -> b -> Endo c forall b c a. (b -> c) -> (a -> b) -> a -> c . (c -> b -> c) -> b -> c -> c forall a b c. (a -> b -> c) -> b -> a -> c flip c -> b -> c g) p a b t)) c z
instance Bifoldable (,) where
bifoldMap :: forall m a b. Monoid m => (a -> m) -> (b -> m) -> (a, b) -> m
bifoldMap a -> m
f b -> m
g ~(a
a, b
b) = a -> m
f a
a m -> m -> m
forall a. Monoid a => a -> a -> a
mappend b -> m
g b
b
instance Bifoldable Const where bifoldMap :: forall m a b. Monoid m => (a -> m) -> (b -> m) -> Const a b -> m bifoldMap a -> m f b -> m _ (Const a a) = a -> m f a a
instance Bifoldable (K1 i) where bifoldMap :: forall m a b. Monoid m => (a -> m) -> (b -> m) -> K1 i a b -> m bifoldMap a -> m f b -> m _ (K1 a c) = a -> m f a c
instance Bifoldable ((,,) x) where
bifoldMap :: forall m a b. Monoid m => (a -> m) -> (b -> m) -> (x, a, b) -> m
bifoldMap a -> m
f b -> m
g ~(x
_,a
a,b
b) = a -> m
f a
a m -> m -> m
forall a. Monoid a => a -> a -> a
mappend b -> m
g b
b
instance Bifoldable ((,,,) x y) where
bifoldMap :: forall m a b. Monoid m => (a -> m) -> (b -> m) -> (x, y, a, b) -> m
bifoldMap a -> m
f b -> m
g ~(x
_,y
_,a
a,b
b) = a -> m
f a
a m -> m -> m
forall a. Monoid a => a -> a -> a
mappend b -> m
g b
b
instance Bifoldable ((,,,,) x y z) where
bifoldMap :: forall m a b.
Monoid m =>
(a -> m) -> (b -> m) -> (x, y, z, a, b) -> m
bifoldMap a -> m
f b -> m
g ~(x
_,y
_,z
_,a
a,b
b) = a -> m
f a
a m -> m -> m
forall a. Monoid a => a -> a -> a
mappend b -> m
g b
b
instance Bifoldable ((,,,,,) x y z w) where
bifoldMap :: forall m a b.
Monoid m =>
(a -> m) -> (b -> m) -> (x, y, z, w, a, b) -> m
bifoldMap a -> m
f b -> m
g ~(x
_,y
_,z
_,w
_,a
a,b
b) = a -> m
f a
a m -> m -> m
forall a. Monoid a => a -> a -> a
mappend b -> m
g b
b
instance Bifoldable ((,,,,,,) x y z w v) where
bifoldMap :: forall m a b.
Monoid m =>
(a -> m) -> (b -> m) -> (x, y, z, w, v, a, b) -> m
bifoldMap a -> m
f b -> m
g ~(x
_,y
_,z
_,w
_,v
_,a
a,b
b) = a -> m
f a
a m -> m -> m
forall a. Monoid a => a -> a -> a
mappend b -> m
g b
b
instance Bifoldable Either where bifoldMap :: forall m a b. Monoid m => (a -> m) -> (b -> m) -> Either a b -> m bifoldMap a -> m f b -> m _ (Left a a) = a -> m f a a bifoldMap a -> m _ b -> m g (Right b b) = b -> m g b b
bifoldr' :: Bifoldable t => (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c bifoldr' :: forall (t :: * -> * -> *) a c b. Bifoldable t => (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c bifoldr' a -> c -> c f b -> c -> c g c z0 t a b xs = ((c -> c) -> a -> c -> c) -> ((c -> c) -> b -> c -> c) -> (c -> c) -> t a b -> c -> c forall c a b. (c -> a -> c) -> (c -> b -> c) -> c -> t a b -> c forall (p :: * -> * -> *) c a b. Bifoldable p => (c -> a -> c) -> (c -> b -> c) -> c -> p a b -> c bifoldl (c -> c) -> a -> c -> c forall {b}. (c -> b) -> a -> c -> b f' (c -> c) -> b -> c -> c forall {b}. (c -> b) -> b -> c -> b g' c -> c forall a. a -> a id t a b xs c z0 where f' :: (c -> b) -> a -> c -> b f' c -> b k a x c z = c -> b k (c -> b) -> c -> b forall a b. (a -> b) -> a -> b $! a -> c -> c f a x c z g' :: (c -> b) -> b -> c -> b g' c -> b k b x c z = c -> b k (c -> b) -> c -> b forall a b. (a -> b) -> a -> b $! b -> c -> c g b x c z
bifoldr1 :: Bifoldable t => (a -> a -> a) -> t a a -> a bifoldr1 :: forall (t :: * -> * -> *) a. Bifoldable t => (a -> a -> a) -> t a a -> a bifoldr1 a -> a -> a f t a a xs = a -> Maybe a -> a forall a. a -> Maybe a -> a fromMaybe ([Char] -> a forall a. HasCallStack => [Char] -> a error [Char] "bifoldr1: empty structure") ((a -> Maybe a -> Maybe a) -> (a -> Maybe a -> Maybe a) -> Maybe a -> t a a -> Maybe a forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr a -> Maybe a -> Maybe a mbf a -> Maybe a -> Maybe a mbf Maybe a forall a. Maybe a Nothing t a a xs) where mbf :: a -> Maybe a -> Maybe a mbf a x Maybe a m = a -> Maybe a forall a. a -> Maybe a Just (case Maybe a m of Maybe a Nothing -> a x Just a y -> a -> a -> a f a x a y)
bifoldrM :: (Bifoldable t, Monad m) => (a -> c -> m c) -> (b -> c -> m c) -> c -> t a b -> m c bifoldrM :: forall (t :: * -> * -> *) (m :: * -> *) a c b. (Bifoldable t, Monad m) => (a -> c -> m c) -> (b -> c -> m c) -> c -> t a b -> m c bifoldrM a -> c -> m c f b -> c -> m c g c z0 t a b xs = ((c -> m c) -> a -> c -> m c) -> ((c -> m c) -> b -> c -> m c) -> (c -> m c) -> t a b -> c -> m c forall c a b. (c -> a -> c) -> (c -> b -> c) -> c -> t a b -> c forall (p :: * -> * -> *) c a b. Bifoldable p => (c -> a -> c) -> (c -> b -> c) -> c -> p a b -> c bifoldl (c -> m c) -> a -> c -> m c forall {b}. (c -> m b) -> a -> c -> m b f' (c -> m c) -> b -> c -> m c forall {b}. (c -> m b) -> b -> c -> m b g' c -> m c forall a. a -> m a forall (m :: * -> *) a. Monad m => a -> m a return t a b xs c z0 where f' :: (c -> m b) -> a -> c -> m b f' c -> m b k a x c z = a -> c -> m c f a x c z m c -> (c -> m b) -> m b forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= c -> m b k g' :: (c -> m b) -> b -> c -> m b g' c -> m b k b x c z = b -> c -> m c g b x c z m c -> (c -> m b) -> m b forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= c -> m b k
bifoldl':: Bifoldable t => (a -> b -> a) -> (a -> c -> a) -> a -> t b c -> a bifoldl' :: forall (t :: * -> * -> *) a b c. Bifoldable t => (a -> b -> a) -> (a -> c -> a) -> a -> t b c -> a bifoldl' a -> b -> a f a -> c -> a g a z0 t b c xs = (b -> (a -> a) -> a -> a) -> (c -> (a -> a) -> a -> a) -> (a -> a) -> t b c -> a -> a forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr b -> (a -> a) -> a -> a forall {b}. b -> (a -> b) -> a -> b f' c -> (a -> a) -> a -> a forall {b}. c -> (a -> b) -> a -> b g' a -> a forall a. a -> a id t b c xs a z0 where f' :: b -> (a -> b) -> a -> b f' b x a -> b k a z = a -> b k (a -> b) -> a -> b forall a b. (a -> b) -> a -> b $! a -> b -> a f a z b x g' :: c -> (a -> b) -> a -> b g' c x a -> b k a z = a -> b k (a -> b) -> a -> b forall a b. (a -> b) -> a -> b $! a -> c -> a g a z c x
bifoldl1 :: Bifoldable t => (a -> a -> a) -> t a a -> a bifoldl1 :: forall (t :: * -> * -> *) a. Bifoldable t => (a -> a -> a) -> t a a -> a bifoldl1 a -> a -> a f t a a xs = a -> Maybe a -> a forall a. a -> Maybe a -> a fromMaybe ([Char] -> a forall a. HasCallStack => [Char] -> a error [Char] "bifoldl1: empty structure") ((Maybe a -> a -> Maybe a) -> (Maybe a -> a -> Maybe a) -> Maybe a -> t a a -> Maybe a forall c a b. (c -> a -> c) -> (c -> b -> c) -> c -> t a b -> c forall (p :: * -> * -> *) c a b. Bifoldable p => (c -> a -> c) -> (c -> b -> c) -> c -> p a b -> c bifoldl Maybe a -> a -> Maybe a mbf Maybe a -> a -> Maybe a mbf Maybe a forall a. Maybe a Nothing t a a xs) where mbf :: Maybe a -> a -> Maybe a mbf Maybe a m a y = a -> Maybe a forall a. a -> Maybe a Just (case Maybe a m of Maybe a Nothing -> a y Just a x -> a -> a -> a f a x a y)
bifoldlM :: (Bifoldable t, Monad m) => (a -> b -> m a) -> (a -> c -> m a) -> a -> t b c -> m a bifoldlM :: forall (t :: * -> * -> *) (m :: * -> *) a b c. (Bifoldable t, Monad m) => (a -> b -> m a) -> (a -> c -> m a) -> a -> t b c -> m a bifoldlM a -> b -> m a f a -> c -> m a g a z0 t b c xs = (b -> (a -> m a) -> a -> m a) -> (c -> (a -> m a) -> a -> m a) -> (a -> m a) -> t b c -> a -> m a forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr b -> (a -> m a) -> a -> m a forall {b}. b -> (a -> m b) -> a -> m b f' c -> (a -> m a) -> a -> m a forall {b}. c -> (a -> m b) -> a -> m b g' a -> m a forall a. a -> m a forall (m :: * -> *) a. Monad m => a -> m a return t b c xs a z0 where f' :: b -> (a -> m b) -> a -> m b f' b x a -> m b k a z = a -> b -> m a f a z b x m a -> (a -> m b) -> m b forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= a -> m b k g' :: c -> (a -> m b) -> a -> m b g' c x a -> m b k a z = a -> c -> m a g a z c x m a -> (a -> m b) -> m b forall a b. m a -> (a -> m b) -> m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= a -> m b k
bitraverse_ :: (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () bitraverse_ :: forall (t :: * -> * -> *) (f :: * -> *) a c b d. (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () bitraverse_ a -> f c f b -> f d g = (a -> f () -> f ()) -> (b -> f () -> f ()) -> f () -> t a b -> f () forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr (f c -> f () -> f () forall a b. f a -> f b -> f b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b (*>) (f c -> f () -> f ()) -> (a -> f c) -> a -> f () -> f () forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> f c f) (f d -> f () -> f () forall a b. f a -> f b -> f b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b (*>) (f d -> f () -> f ()) -> (b -> f d) -> b -> f () -> f () forall b c a. (b -> c) -> (a -> b) -> a -> c . b -> f d g) (() -> f () forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure ())
bifor_ :: (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () bifor_ :: forall (t :: * -> * -> *) (f :: * -> *) a b c d. (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () bifor_ t a b t a -> f c f b -> f d g = (a -> f c) -> (b -> f d) -> t a b -> f () forall (t :: * -> * -> *) (f :: * -> *) a c b d. (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () bitraverse_ a -> f c f b -> f d g t a b t
bimapM_ :: (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () bimapM_ :: forall (t :: * -> * -> *) (f :: * -> *) a c b d. (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () bimapM_ = (a -> f c) -> (b -> f d) -> t a b -> f () forall (t :: * -> * -> *) (f :: * -> *) a c b d. (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () bitraverse_
biforM_ :: (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () biforM_ :: forall (t :: * -> * -> *) (f :: * -> *) a b c d. (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () biforM_ = t a b -> (a -> f c) -> (b -> f d) -> f () forall (t :: * -> * -> *) (f :: * -> *) a b c d. (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () bifor_
bisequenceA_ :: (Bifoldable t, Applicative f) => t (f a) (f b) -> f () bisequenceA_ :: forall (t :: * -> * -> *) (f :: * -> *) a b. (Bifoldable t, Applicative f) => t (f a) (f b) -> f () bisequenceA_ = t (f a) (f b) -> f () forall (t :: * -> * -> *) (f :: * -> *) a b. (Bifoldable t, Applicative f) => t (f a) (f b) -> f () bisequence_
bisequence_ :: (Bifoldable t, Applicative f) => t (f a) (f b) -> f () bisequence_ :: forall (t :: * -> * -> *) (f :: * -> *) a b. (Bifoldable t, Applicative f) => t (f a) (f b) -> f () bisequence_ = (f a -> f () -> f ()) -> (f b -> f () -> f ()) -> f () -> t (f a) (f b) -> f () forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr f a -> f () -> f () forall a b. f a -> f b -> f b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b (*>) f b -> f () -> f () forall a b. f a -> f b -> f b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b (*>) (() -> f () forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure ())
biasum :: (Bifoldable t, Alternative f) => t (f a) (f a) -> f a biasum :: forall (t :: * -> * -> *) (f :: * -> *) a. (Bifoldable t, Alternative f) => t (f a) (f a) -> f a biasum = (f a -> f a -> f a) -> (f a -> f a -> f a) -> f a -> t (f a) (f a) -> f a forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr f a -> f a -> f a forall a. f a -> f a -> f a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a (<|>) f a -> f a -> f a forall a. f a -> f a -> f a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a (<|>) f a forall a. f a forall (f :: * -> *) a. Alternative f => f a empty
bimsum :: (Bifoldable t, Alternative f) => t (f a) (f a) -> f a bimsum :: forall (t :: * -> * -> *) (f :: * -> *) a. (Bifoldable t, Alternative f) => t (f a) (f a) -> f a bimsum = t (f a) (f a) -> f a forall (t :: * -> * -> *) (f :: * -> *) a. (Bifoldable t, Alternative f) => t (f a) (f a) -> f a biasum
biList :: Bifoldable t => t a a -> [a] biList :: forall (t :: * -> * -> *) a. Bifoldable t => t a a -> [a] biList = (a -> [a] -> [a]) -> (a -> [a] -> [a]) -> [a] -> t a a -> [a] forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr (:) (:) []
binull :: Bifoldable t => t a b -> Bool binull :: forall (t :: * -> * -> *) a b. Bifoldable t => t a b -> Bool binull = (a -> Bool -> Bool) -> (b -> Bool -> Bool) -> Bool -> t a b -> Bool forall a c b. (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c forall (p :: * -> * -> *) a c b. Bifoldable p => (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c bifoldr (\a _ Bool _ -> Bool False) (\b _ Bool _ -> Bool False) Bool True
bilength :: Bifoldable t => t a b -> Int bilength :: forall (t :: * -> * -> *) a b. Bifoldable t => t a b -> Int bilength = (Int -> a -> Int) -> (Int -> b -> Int) -> Int -> t a b -> Int forall (t :: * -> * -> *) a b c. Bifoldable t => (a -> b -> a) -> (a -> c -> a) -> a -> t b c -> a bifoldl' (\Int c a _ -> Int cInt -> Int -> Int forall a. Num a => a -> a -> a +Int
bielem :: (Bifoldable t, Eq a) => a -> t a a -> Bool bielem :: forall (t :: * -> * -> *) a. (Bifoldable t, Eq a) => a -> t a a -> Bool bielem a x = (a -> Bool) -> (a -> Bool) -> t a a -> Bool forall (t :: * -> * -> *) a b. Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool biany (a -> a -> Bool forall a. Eq a => a -> a -> Bool == a x) (a -> a -> Bool forall a. Eq a => a -> a -> Bool == a x)
biconcat :: Bifoldable t => t [a] [a] -> [a] biconcat :: forall (t :: * -> * -> *) a. Bifoldable t => t [a] [a] -> [a] biconcat = t [a] [a] -> [a] forall m. Monoid m => t m m -> m forall (p :: * -> * -> *) m. (Bifoldable p, Monoid m) => p m m -> m bifold
bimaximum :: forall t a. (Bifoldable t, Ord a) => t a a -> a bimaximum :: forall (t :: * -> * -> *) a. (Bifoldable t, Ord a) => t a a -> a bimaximum = a -> Maybe a -> a forall a. a -> Maybe a -> a fromMaybe ([Char] -> a forall a. HasCallStack => [Char] -> a error [Char] "bimaximum: empty structure") (Maybe a -> a) -> (t a a -> Maybe a) -> t a a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . Max a -> Maybe a forall a. Max a -> Maybe a getMax (Max a -> Maybe a) -> (t a a -> Max a) -> t a a -> Maybe a forall b c a. (b -> c) -> (a -> b) -> a -> c . (a -> Max a) -> (a -> Max a) -> t a a -> Max a forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap a -> Max a mj a -> Max a mj where mj :: a -> Max a mj = Maybe a -> Max a forall a. Maybe a -> Max a Max (Maybe a -> Max a) -> (a -> Maybe a) -> a -> Max a forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (a -> Maybe a forall a. a -> Maybe a Just :: a -> Maybe a)
biminimum :: forall t a. (Bifoldable t, Ord a) => t a a -> a biminimum :: forall (t :: * -> * -> *) a. (Bifoldable t, Ord a) => t a a -> a biminimum = a -> Maybe a -> a forall a. a -> Maybe a -> a fromMaybe ([Char] -> a forall a. HasCallStack => [Char] -> a error [Char] "biminimum: empty structure") (Maybe a -> a) -> (t a a -> Maybe a) -> t a a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . Min a -> Maybe a forall a. Min a -> Maybe a getMin (Min a -> Maybe a) -> (t a a -> Min a) -> t a a -> Maybe a forall b c a. (b -> c) -> (a -> b) -> a -> c . (a -> Min a) -> (a -> Min a) -> t a a -> Min a forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap a -> Min a mj a -> Min a mj where mj :: a -> Min a mj = Maybe a -> Min a forall a. Maybe a -> Min a Min (Maybe a -> Min a) -> (a -> Maybe a) -> a -> Min a forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (a -> Maybe a forall a. a -> Maybe a Just :: a -> Maybe a)
bisum :: (Bifoldable t, Num a) => t a a -> a bisum :: forall (t :: * -> * -> *) a. (Bifoldable t, Num a) => t a a -> a bisum = Sum a -> a forall a. Sum a -> a getSum (Sum a -> a) -> (t a a -> Sum a) -> t a a -> a forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (a -> Sum a) -> (a -> Sum a) -> t a a -> Sum a forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap a -> Sum a forall a. a -> Sum a Sum a -> Sum a forall a. a -> Sum a Sum
biproduct :: (Bifoldable t, Num a) => t a a -> a biproduct :: forall (t :: * -> * -> *) a. (Bifoldable t, Num a) => t a a -> a biproduct = Product a -> a forall a. Product a -> a getProduct (Product a -> a) -> (t a a -> Product a) -> t a a -> a forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (a -> Product a) -> (a -> Product a) -> t a a -> Product a forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap a -> Product a forall a. a -> Product a Product a -> Product a forall a. a -> Product a Product
biconcatMap :: Bifoldable t => (a -> [c]) -> (b -> [c]) -> t a b -> [c] biconcatMap :: forall (t :: * -> * -> *) a c b. Bifoldable t => (a -> [c]) -> (b -> [c]) -> t a b -> [c] biconcatMap = (a -> [c]) -> (b -> [c]) -> t a b -> [c] forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap
biand :: Bifoldable t => t Bool Bool -> Bool biand :: forall (t :: * -> * -> *). Bifoldable t => t Bool Bool -> Bool biand = All -> Bool getAll (All -> Bool) -> (t Bool Bool -> All) -> t Bool Bool -> Bool forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (Bool -> All) -> (Bool -> All) -> t Bool Bool -> All forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap Bool -> All All Bool -> All All
bior :: Bifoldable t => t Bool Bool -> Bool bior :: forall (t :: * -> * -> *). Bifoldable t => t Bool Bool -> Bool bior = Any -> Bool getAny (Any -> Bool) -> (t Bool Bool -> Any) -> t Bool Bool -> Bool forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (Bool -> Any) -> (Bool -> Any) -> t Bool Bool -> Any forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap Bool -> Any Any Bool -> Any Any
biany :: Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool biany :: forall (t :: * -> * -> *) a b. Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool biany a -> Bool p b -> Bool q = Any -> Bool getAny (Any -> Bool) -> (t a b -> Any) -> t a b -> Bool forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (a -> Any) -> (b -> Any) -> t a b -> Any forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap (Bool -> Any Any (Bool -> Any) -> (a -> Bool) -> a -> Any forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Bool p) (Bool -> Any Any (Bool -> Any) -> (b -> Bool) -> b -> Any forall b c a. (b -> c) -> (a -> b) -> a -> c . b -> Bool q)
biall :: Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool biall :: forall (t :: * -> * -> *) a b. Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool biall a -> Bool p b -> Bool q = All -> Bool getAll (All -> Bool) -> (t a b -> All) -> t a b -> Bool forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c #. (a -> All) -> (b -> All) -> t a b -> All forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap (Bool -> All All (Bool -> All) -> (a -> Bool) -> a -> All forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Bool p) (Bool -> All All (Bool -> All) -> (b -> Bool) -> b -> All forall b c a. (b -> c) -> (a -> b) -> a -> c . b -> Bool q)
bimaximumBy :: Bifoldable t => (a -> a -> Ordering) -> t a a -> a bimaximumBy :: forall (t :: * -> * -> *) a. Bifoldable t => (a -> a -> Ordering) -> t a a -> a bimaximumBy a -> a -> Ordering cmp = (a -> a -> a) -> t a a -> a forall (t :: * -> * -> *) a. Bifoldable t => (a -> a -> a) -> t a a -> a bifoldr1 a -> a -> a max' where max' :: a -> a -> a max' a x a y = case a -> a -> Ordering cmp a x a y of Ordering GT -> a x Ordering _ -> a y
biminimumBy :: Bifoldable t => (a -> a -> Ordering) -> t a a -> a biminimumBy :: forall (t :: * -> * -> *) a. Bifoldable t => (a -> a -> Ordering) -> t a a -> a biminimumBy a -> a -> Ordering cmp = (a -> a -> a) -> t a a -> a forall (t :: * -> * -> *) a. Bifoldable t => (a -> a -> a) -> t a a -> a bifoldr1 a -> a -> a min' where min' :: a -> a -> a min' a x a y = case a -> a -> Ordering cmp a x a y of Ordering GT -> a y Ordering _ -> a x
binotElem :: (Bifoldable t, Eq a) => a -> t a a-> Bool binotElem :: forall (t :: * -> * -> *) a. (Bifoldable t, Eq a) => a -> t a a -> Bool binotElem a x = Bool -> Bool not (Bool -> Bool) -> (t a a -> Bool) -> t a a -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> t a a -> Bool forall (t :: * -> * -> *) a. (Bifoldable t, Eq a) => a -> t a a -> Bool bielem a x
bifind :: Bifoldable t => (a -> Bool) -> t a a -> Maybe a bifind :: forall (t :: * -> * -> *) a. Bifoldable t => (a -> Bool) -> t a a -> Maybe a bifind a -> Bool p = First a -> Maybe a forall a. First a -> Maybe a getFirst (First a -> Maybe a) -> (t a a -> First a) -> t a a -> Maybe a forall b c a. (b -> c) -> (a -> b) -> a -> c . (a -> First a) -> (a -> First a) -> t a a -> First a forall m a b. Monoid m => (a -> m) -> (b -> m) -> t a b -> m forall (p :: * -> * -> *) m a b. (Bifoldable p, Monoid m) => (a -> m) -> (b -> m) -> p a b -> m bifoldMap a -> First a finder a -> First a finder where finder :: a -> First a finder a x = Maybe a -> First a forall a. Maybe a -> First a First (if a -> Bool p a x then a -> Maybe a forall a. a -> Maybe a Just a x else Maybe a forall a. Maybe a Nothing)