module Fold.Effectful
  (
    {- * Type -} EffectfulFold (..),

    {- * Run -} run,

    {- * Examples -}
    {- ** General -} effect, effectMonoid,
    {- ** Pure -}
    {- *** Monoid -} monoid,
    {- *** Length -} null, length,
    {- *** Boolean -} and, or, all, any,
    {- *** Numeric -} sum, product, mean, variance, standardDeviation,
    {- *** Search -} element, notElement, find, lookup,
    {- *** Index -} index, findIndex, elementIndex,
    {- *** List -} list, reverseList,
    {- ** Nonempty -}
    {- *** General -} magma, semigroup,
    {- *** Endpoints -} first, last,
    {- *** Extrema -} maximum, minimum, maximumBy, minimumBy,

    {- * Conversion -} fold, nonemptyFold,

    {- * Utilities -} hoist, duplicate, premap, prefilter, drop,
  )
  where

import Fold.Effectful.Conversion
import Fold.Effectful.Examples
import Fold.Effectful.Nonempty
import Fold.Effectful.Pure
import Fold.Effectful.Run
import Fold.Effectful.Type
import Fold.Effectful.Utilities