packages feed

orville-postgresql-1.1.0.0: src/Orville/PostgreSQL/Internal/Extra/NonEmpty.hs

{- |
Copyright : Flipstone Technology Partners 2023
License   : MIT
Stability : Stable

@since 1.0.0.0
-}
module Orville.PostgreSQL.Internal.Extra.NonEmpty
  ( foldl1'
  , foldMap1'
  )
where

import qualified Data.Foldable as Fold
import Data.List.NonEmpty (NonEmpty ((:|)))

{- | A variant of foldl' that safely does not need a base case.

@since 1.0.0.0
-}
foldl1' :: (a -> a -> a) -> NonEmpty a -> a
foldl1' f (first :| rest) =
  Fold.foldl' f first rest

{- | A variant of foldMap' that safely does not need a base case.

@since 1.0.0.0
-}
foldMap1' :: Semigroup m => (a -> m) -> NonEmpty a -> m
foldMap1' f (first :| rest) =
  Fold.foldl' (\m a -> m <> f a) (f first) rest