-- | This module exports a few common folds. Some of these are defined
-- as @L'@ folds if they cannot short-circuit. The rest are defined
-- as monoidal folds. Since you may want to combine a monoidal and
-- strict left fold, 'strictify' is an operation that drops laziness
-- and reassociates an 'M'. This may result in a slow down in
-- performance though.
--
-- For the classic example
--
-- > import           Control.Applicative
-- > import qualified Data.Fold.Common as C
-- >
-- > avg :: C.L' Double Double
-- > avg = (/) <$> C.sum <*> C.count
-- >
-- > main :: IO ()
-- > main = print $ C.run [1 .. 10000000] avg
--
-- This will run in constant memory as we'd hope.
--
module Data.Fold.Common
       ( module Data.Fold
       , module Data.Fold.Common.L'
       , module Data.Fold.Common.M) where
import Data.Fold
import Data.Fold.Common.L'
import Data.Fold.Common.M