Define a foldr "safe" minimum

This commit is contained in:
jgk
2021-08-18 19:16:42 +02:00
parent 349f4c2783
commit 61adae1e40
3 changed files with 28 additions and 29 deletions
+9
View File
@@ -1,6 +1,7 @@
{-# LANGUAGE TupleSections #-}
module FoldableHelp
( safeMinimumOn
, safeMinimumOnr
, safeMinimumOnMaybe
, module Data.Foldable
)
@@ -21,6 +22,14 @@ safeMinimumOn f = foldl' g Nothing
| f x < f y = Just x
| otherwise = Just y
g Nothing y = Just y
safeMinimumOnr :: (Foldable t,Ord b) => (a -> b) -> t a -> Maybe a
{-# INLINE safeMinimumOnr #-}
safeMinimumOnr f = foldr g Nothing
where
g y (Just x)
| f x < f y = Just x
| otherwise = Just y
g y Nothing = Just y
safeMinimumOnMaybe :: (Ord b) => (a -> Maybe b) -> [a] -> Maybe a
safeMinimumOnMaybe f ys = fst <$> go Nothing ys
where