我尝试编写一个maximum
类似于Prelude
. 我的第一个天真的方法是这样的:
maximum' :: (F.Foldable a, Ord b) => a b -> Maybe b
maximum' mempty = Nothing
maximum' xs = Just $ F.foldl1 max xs
但是,当我测试它时,Nothing
无论输入如何,它都会返回:
> maximum' [1,2,3]
> Nothing
现在我想知道是否可以获取 Monoid 类型实例的空值。我写的一个测试函数可以正常工作:
getMempty :: (Monoid a) => a -> a
getMempty _ = mempty
> getMempty [1,2,3]
> []
我已经看过这两个问题,但我不知道答案如何解决我的问题:
Write a Maximum Monoid using Maybe in Haskell
Haskell Pattern Matching on the Empty Set
我将如何重写maximum'
函数以使其工作?