【发布时间】:2012-08-31 13:58:04
【问题描述】:
我尝试编写一个通用的maximum 函数,类似于Prelude 中的函数。我的第一个天真的方法如下所示:maximum' :: (F.Foldable a, Ord b) => a b -> Maybe bmaximum' mempty = Nothingmaximum' xs = Just $ F.foldl1 max xs
但是,当我测试它时,无论输入如何,它总是返回 Nothing:> maximum' [1,2,3]> Nothing
现在我想知道是否可以获取 Monoid 类型实例的空值。我写的一个测试函数工作正常:getMempty :: (Monoid a) => a -> agetMempty _ = mempty
> getMempty [1,2,3]> []
我已经看过这两个问题,但我不知道答案如何解决我的问题:
Write a Maximum Monoid using Maybe in Haskell
Haskell Pattern Matching on the Empty Set
我将如何重写 maximum' 函数以使其工作?
【问题讨论】:
-
您的第一种方法失败了,因为您不能对任意值进行模式匹配,只能对构造函数进行模式匹配。您将参数绑定到一个名为
mempty的变量,它会影响Monoid中定义的变量。您链接的第二个问题涉及类似的问题。如何最好地实现您的实际目标是另一回事。
标签: haskell pattern-matching monoids