相关疑难解决方法(0)

Haskell模式匹配空集

我正在将一些Haskell代码从使用列表更改为集合.我认为,我理解所需的一切,但我不确定如何在套装上进行模式匹配.列表有这个很好的文字语法,似乎很难用Set构造函数模拟.例如,我可能有一些像这样的代码:

foo [] = []
foo x = other_thing
Run Code Online (Sandbox Code Playgroud)

如何编写此代码,以便使用集而不是列表?

haskell pattern-matching

18
推荐指数
2
解决办法
3143
查看次数

在Haskell中使用Maybe写一个最大Monoid

我一直在经历Haskell幺半群及其用途,这让我对幺半群的基本知识有了很好的理解.博客文章中介绍的一件事是Any monoid,它的用法如下:

foldMap (Any . (== 1)) tree
foldMap (All . (> 1)) [1,2,3]
Run Code Online (Sandbox Code Playgroud)

在类似的情况下,我一直在尝试构建一个最大的幺半群,并提出以下内容:

newtype Maximum a = Maximum { getMaximum :: Maybe a }
        deriving (Eq, Ord, Read, Show)

instance Ord a => Monoid (Maximum a) where
        mempty = Maximum Nothing
        m@(Maximum (Just x)) `mappend` Maximum Nothing = m
        Maximum Nothing `mappend` y = y
        m@(Maximum (Just x)) `mappend` n@(Maximum (Just y))
          | x > y = m
          | otherwise = n
Run Code Online (Sandbox Code Playgroud)

我可以为特定类型构造一个最大幺半群 - 例如Num,非常容易,但希望它对任何东西都有用(明显要求任何东西都是Ord的一个实例).

此时我的代码编译,但就是这样.如果我尝试运行它,我得到这个: …

haskell monoids

12
推荐指数
1
解决办法
1398
查看次数

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

我想用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向我展示如何获得奖励积分,但这似乎更加困难。

haskell minimum foldable

5
推荐指数
1
解决办法
390
查看次数

标签 统计

haskell ×3

foldable ×1

minimum ×1

monoids ×1

pattern-matching ×1