小编Has*_*bit的帖子

如何解决 Haskell 代码错误“<>' 不是类 `Monoid' 的(可见)方法”?

让我们看看 Haskell 中用于处理反向列表的新数据类型的声明:

import Data.Monoid 
data RevList a = Nil | RCons (RevList a) a deriving (Eq, Show)

instance Monoid a => Monoid (RevList a) where
    mempty = Nil

instance Semigroup a => Monoid (RevList a) where
    Nil <> RCons (RevList a) a = RCons (RevList a) a
    RCons (RevList a) a <> RNil = RCons (RevList a) a
    Nil <> Nil = Nil
Run Code Online (Sandbox Code Playgroud)

我困扰的问题是编译失败,其描述如下:

 `<>' is not a (visible) method of class `Monoid'
Run Code Online (Sandbox Code Playgroud)

首先,我尝试在没有任何 Semigroup 实例声明的情况下创建一个 Monoid 实例,但是在阅读此问题 …

haskell monoids semigroup

3
推荐指数
1
解决办法
652
查看次数

Haskell 中谓词集上的`fmap` 是什么意思?

我正在为 Haskell 编程做的学生作业包括一个我有点困惑要解决的任务。事情是这样给出的:只为基于集合的新类型创建一个 Functor 类的实例。有一个声明:

newtype Set x = Set { contains :: (x -> Bool) }
Run Code Online (Sandbox Code Playgroud)

这是我理解 iffmap应用于诸如一组谓词之类的东西的意义的一个案例。在处理以前的任务时,我已经定义fmap(+3)(更改整数)、(toUpper)(字符串)等函数。这是我第一次处理超出正常类型(各种数字、字符串、字符)的任何内容。我谦虚地尝试开始:

instance Functor Set where
    fmap f (Set x) = if (contains x) == True then Set (f x) else Set x
Run Code Online (Sandbox Code Playgroud)

当然,这是一个无意义的代码,但我想在fmap应用程序顺利之前需要评估一些真/假。但是,首先,请您解释一下谓​​词集的问题以阐述更明智的方法吗?

haskell functional-programming functor

3
推荐指数
1
解决办法
180
查看次数