failMonad中的方法被一些人认为是一个坑;这是对类的任意添加,而不是来自原始的范畴理论。当然,在当前的情况下,许多Monad类型具有逻辑和有用性fail实例。

MonadPlus类是Monad的子类,它提供了mzero方法,该方法逻辑地将失败的概念封装在一个单一的单元中。

因此,一个库设计人员如果想要编写一些执行某种故障处理的一元代码,可以选择让他的代码使用fail方法,或者将其代码限制在MonadPlus类中,这样他就可以对使用mzero即使他不关心单性组合mplus完全是行动。

关于这个主题的一些讨论在这个wiki页面中关于改革MonadPlus课程的建议。

所以我想我有一个具体的问题:

如果有的话,哪一个单一的例子有一个自然的fail方法,但不能是MonadPlus的实例,因为它们没有逻辑实现mplus

砸蛋大叔砸蛋大叔提问于
全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯回答于

Either它是一元实例,如下所示:

{-# LANGUAGE FlexibleInstances #-}
instance Monad (Either String) where
  (Left x) >>= _   = Left x
  (Right a)  >>= f = f a
  return           = Right
  fail             = Left

每一个实例mplus应符合这两条法律:

mzero `mplus` a -> a
a `mplus` mzero -> a

合理的MonadPlus例如:

instance MonadPlus (Either a) where
  mzero = Left undefined
  mplus (Left _) b = b
  mplus a _        = a

mplus返回第二次计算。注意它与(>>)它不符合法律:

Left a   >>    Right b -> Left a
Left a `mplus` Right b -> Right b

(>>)将在第一次计算时停止,而mplus而是尝试三。[]也有这样的行为:

[] >> [1..4] -> []
[] `mplus` [1..4] -> [1,2,3,4]

这只是为了讨论MonadPlus特别是mplus(>>)形成对比

回答过的其他问题

云计算如何帮助大数据快速完成基础架构?

全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯
其实楼上的一些应该就是最基础的功能套件了把: 其实个人更加看中的云计算的可扩展性和便捷性。 [图片] 云计算的基础架构类似于这样 云基础架构在传统基础架构计算、存储、网络硬件层的基础上,增加了虚拟化层、云层: 虚拟化层:大多数云基础架构都广泛采用虚拟化技术,包括计算虚拟化、存...... 展开详请

云服务器是否支持更换操作系统?

全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯
如果是同平台内:Linux-Linux;Windows-Windows如linux换linux,windows换windows,可以直接在云主机控制台的重装系统按钮进行自主更换;操作步骤:登录云主机管理中心控制台->选中需更换系统的云主机->更多->关机->在关机状态下->点“更...... 展开详请

智能音箱的工作原理是什么?

全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯
智能音箱提供内容和服务的工作原理:假设消费者向智能音箱发出“查询A到B的机票”的指令,智能音箱的语音交互系统通过语音算法本地处理单元和音频解码单元收集语音、降噪、识别唤醒词、将语音信号转为数字信号,之后将处理后的数字信号上传至云端服务器,云端服务器将进行语音数字编码识别和语义理解...... 展开详请

目前国内的语音识别技术达到了什么水准?还存在哪些问题?

全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯

要提高语音识别准确率,光语音方面努力不够,必须得加上语义处理,结合起来才有用,要不光听的清楚理解不了也不行呀......

什么是hadoop和Spark?它们是大数据生态圈的哪一环?

全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯
先回答题主的第一个问题: Hadoop 是什么? Hadoop 是 Apache 旗下的一套开源软件平台。 Hadoop 可以利用计算机集群,根据用户自定义的业务逻辑对海量数据进行分布式处理。 通常我们说的 Hadoop 是指一个更广泛的概念--Hadoop 生态圈。 [图片]...... 展开详请

identifier可以使用中文吗?

全球资讯翻译官为您提供人工智能,机器学习,神经网络等技术的前沿资讯

独立模式下,identifier长度建议不超过32字节,可以使用中文。 托管模式下,字符串类型的identifier长度为4~24个字节,请使用英文字符和下划线,不能全为数字,大小写不敏感。

关于作者

全球资讯翻译官

为您提供人工智能,机器学习,神经网络等技术的前沿资...

所属标签

扫码关注云+社区