packages feed

papa-0.4.0: src/Papa/Semigroupoids/Data/Semigroup/Foldable.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wall #-}

module Papa.Semigroupoids.Data.Semigroup.Foldable (
  maximum,
  minimum,
) where

import Control.Category ((.))
import Data.Ord (Ord)
import Data.Semigroup (Max (Max, getMax), Min (Min, getMin))
import Data.Semigroup.Foldable

{-# INLINE maximum #-}
-- | Find the maximum element in a non-empty structure.
--
-- >>> import Data.List.NonEmpty (NonEmpty(..))
-- >>> maximum (1 :| [2,3,4])
-- 4
-- >>> maximum (10 :| [5,20,3])
-- 20
maximum ::
  (Ord a, Foldable1 f) =>
  f a ->
  a
maximum =
  getMax . foldMap1 Max

{-# INLINE minimum #-}
-- | Find the minimum element in a non-empty structure.
--
-- >>> import Data.List.NonEmpty (NonEmpty(..))
-- >>> minimum (1 :| [2,3,4])
-- 1
-- >>> minimum (10 :| [5,20,3])
-- 3
minimum ::
  (Ord a, Foldable1 f) =>
  f a ->
  a
minimum =
  getMin . foldMap1 Min