module Foldable
  ( -- * Foldable
    Foldable(fold, foldMap, foldr, foldr', foldl', toList, null, length,
      elem, sum, product)
  , all
  , and
  , any
  , asum
  , concatMap
  , find
  , foldBy
  , foldM
  , foldM_
  , foldMapBy
  , foldlM
  , foldr1May
  , foldrM
  , for_
  , group
  , groupAllWith
  , groupBy
  , groupWith
  , inits
  , insert
  , maximumByMay
  , maximumMay
  , minimumByMay
  , minimumMay
  , msum
  , notElem
  , or
  , sequenceA_
  , tails
  , traverse_
    -- * Foldable1
  , Foldable1(..)
  , asum1
  , foldlM1
  , foldrM1
  , for1_
  , intercalate1
  , intercalateMap1
  , sequenceA1_
  , traverse1_
    -- * Bifoldable
  , Bifoldable(..)
  , bifoldr'
  , bifoldrM
  , bifoldl'
  , bifoldlM
  , bitraverse_
  , bifor_
  , bisequence_
  , biasum
  , biList
  , binull
  , bilength
  , bielem
  , bisum
  , biproduct
  , biconcatMap
  , biand
  , bior
  , biany
  , biall
  , binotElem
  , bifind
    -- * Bifoldable1
  , Bifoldable1(..)
  , bitraverse1_
  , bifor1_
  , bisequenceA1_
  ) where

import Control.Monad             (foldM, foldM_)
import Data.Bifoldable           (Bifoldable(bifold, bifoldMap, bifoldr),
                                  biList, biall, biand, biany, biasum,
                                  biconcatMap, bielem, bifind, bifoldl',
                                  bifoldlM, bifoldr', bifoldrM, bifor_,
                                  bilength, binotElem, binull, bior, biproduct,
                                  bisequence_, bisum, bitraverse_)
import Data.Foldable
import Data.List.NonEmpty        (group, groupAllWith, groupBy, groupWith,
                                  inits, insert, tails)
import Data.Reflection
import Data.Semigroup.Bifoldable (Bifoldable1(bifold1, bifoldMap1), bifor1_,
                                  bisequenceA1_, bitraverse1_)
import Data.Semigroup.Foldable   (Foldable1(fold1, foldMap1, toNonEmpty), asum1,
                                  foldlM1, foldrM1, for1_, intercalate1,
                                  intercalateMap1, sequenceA1_, traverse1_)
import Safe.Foldable             (foldr1May, maximumByMay, maximumMay,
                                  minimumByMay, minimumMay)