{-# LANGUAGE LambdaCase        #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Bricks.Internal.List

  ( module Data.List
  , module Data.List.EitherFunctions

  , minimum, maximum

  ) where

-- either-list-functions
import Data.List.EitherFunctions

-- base
import           Data.List  hiding (maximum, minimum)
import qualified Data.List  as List
import           Data.Maybe (Maybe (..))
import           Data.Ord   (Ord (..))

{- |

>>> minimum [1,2,3]
Just 1

>>> minimum []
Nothing

-}
minimum :: Ord a => [a] -> Maybe a
minimum =
  \case
    [] -> Nothing
    xs -> Just (List.minimum xs)

{- |

>>> maximum [1,2,3]
Just 3

>>> maximum []
Nothing

-}
maximum :: Ord a => [a] -> Maybe a
maximum =
  \case
    [] -> Nothing
    xs -> Just (List.maximum xs)