gpt4 book ai didi

haskell - 无法从 (MonadRandom r) 推导出 (Functor r)

转载 作者:行者123 更新时间:2023-12-04 23:07:29 25 4
gpt4 key购买 nike

下面的简单代码

import Control.Monad
import Control.Monad.Random

psum :: (MonadRandom r) => Int -> r Double -> r Double
psum n x = fmap sum $ replicateM n x

产生错误:
Could not deduce (Functor r) arising from a use of `fmap'
from the context (MonadRandom r)

这对我来说很奇怪,因为
class (Monad m) => MonadRandom m where ...

Control.Monad.Random.Class源文件,并且由于 monad 是仿函数,GHC 应该推断出 r在我的上下文中是一个仿函数。我也尝试导入 Control.Monad.Random.Class没有成功。

手动添加 Functorr 的约束工作,但我觉得这很丑陋。

我在这里想念什么?

最佳答案

理论上单子(monad)是仿函数,但遗憾的是 Functor不是 Monad 的父类(super class)没有充分的理由。

而不是添加 Functor r您也可以使用 liftM而不是 fmap .

编辑:似乎真的没有充分的理由。这些类(class)在Haskell 1.3 中一起介绍。 ,并且父类(super class)已经存在并用于MonadPlusMonadZero .

关于haskell - 无法从 (MonadRandom r) 推导出 (Functor r),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com