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

时间:2016-05-23 18:53:57

标签: haskell minimum foldable

我想用foldr或foldMap实现最小化。根据这个练习,它应该有这个定义:

mini :: (Foldable t, Ord a) => t a -> Maybe a -- named "mini" to avoid name clash

这听起来非常简单,但我不知道下面的X可以替代X以使其工作。请帮忙吗?

mini xs = Just (foldr min X xs)

你也可以通过foldMap向我展示如何使用它来获得奖励积分,但这似乎更难。

2 个答案:

答案 0 :(得分:4)

你可以这样做:

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) 

答案 1 :(得分:-1)

您可以尝试将“X”替换为列表中的第一个元素。当然,现在应该处理使用空列表调用函数'mini'时的情况。