packages feed

incipit-base-0.7.0.2: lib/Incipit/Foldable.hs

-- |Overrides for problematic 'Foldable' functions.
module Incipit.Foldable (
  module Incipit.Foldable,
  module Data.Foldable,
) where

import qualified Data.Foldable as Foldable
import Data.Foldable (
  Foldable (elem, fold, foldMap, foldMap', foldl, foldl', foldl1, foldr, foldr', foldr1, length, null, product, sum, toList),
  all,
  and,
  any,
  asum,
  concat,
  concatMap,
  find,
  foldlM,
  forM_,
  for_,
  mapM_,
  or,
  sequenceA_,
  sequence_,
  traverse_,
  )
import Data.Maybe (Maybe (Just, Nothing))
import Data.Ord (Ord, Ordering)

-- |Safe version of 'Foldable.minimum'.
minimum ::
  ∀ t a .
  Ord a =>
  Foldable t =>
  t a ->
  Maybe a
minimum ta =
  if null ta
  then Nothing
  else Just (Foldable.minimum ta)
{-# inlineable minimum #-}

-- |Safe version of 'Foldable.minimumBy'.
minimumBy ::
  ∀ t a .
  Foldable t =>
  (a -> a -> Ordering) ->
  t a ->
  Maybe a
minimumBy cmp ta =
  if null ta
  then Nothing
  else Just (Foldable.minimumBy cmp ta)
{-# inlineable minimumBy #-}

-- |Safe version of 'Foldable.maximum'.
maximum ::
  ∀ t a .
  Ord a =>
  Foldable t =>
  t a ->
  Maybe a
maximum ta =
  if null ta
  then Nothing
  else Just (Foldable.maximum ta)
{-# inlineable maximum #-}

-- |Safe version of 'Foldable.maximumBy'.
maximumBy ::
  ∀ t a .
  Foldable t =>
  (a -> a -> Ordering) ->
  t a ->
  Maybe a
maximumBy cmp ta =
  if null ta
  then Nothing
  else Just (Foldable.maximumBy cmp ta)
{-# inlineable maximumBy #-}