如何使用foldr(或foldMap)实现最小值?

The*_*Cat 5 haskell minimum foldable

我想用foldr或foldMap实现最小值。根据练习,它应具有以下定义:

mini :: (Foldable t, Ord a) => t a -> Maybe a -- named "mini" to avoid name clash
Run Code Online (Sandbox Code Playgroud)

听起来很简单,但是我不知道可以在下面的X中添加什么才能使其起作用。请帮忙?

mini xs = Just (foldr min X xs)
Run Code Online (Sandbox Code Playgroud)

而且,您也可以通过foldMap向我展示如何获得奖励积分,但这似乎更加困难。

Lee*_*Lee 5

您可以这样做:

mini :: (Foldable f, Ord a) => f a -> Maybe a
mini = foldr maybeMin Nothing
  where
    maybeMin x Nothing = Just x
    maybeMin x (Just y) = Just (min x y) 
Run Code Online (Sandbox Code Playgroud)

  • @TheUnfunCat您可能会发现有用的一件事是打孔。如果您写成`mini ::(Foldable t,Ord a)=> ta-> Maybe a; mini xs = folder _ Nothing xs`,GHC会告诉您应该将值__放在哪里的值的类型。 (2认同)