为什么验证会违反单子定律?

2023-11-25

On SO解释了为什么 scalaz、cats (Scala) 或 Arrow (Kotlin) 中的 Validation 不能是 monad。

据我了解,这是因为他们根据应用函子对单子进行了建模,并且作为应用的验证的所需行为(收集所有无效值)与作为单子的验证的所需行为不同(序列验证并在首先无效)。因此,当您想要快速失败时,您需要将验证转换为任一(这是一个单子)。

On https://groups.google.com/forum/#!msg/scalaz/IWuHC0nlVws/syRUkXJklWIJ,他们提到验证不是 monad 的原因是因为以下属性不成立:

x <|*|> y === x >>= (a => y map ((a, _))) 

但看看 monad 的定义,上面的属性并不属于单子法则。那么,这是 monad 是根据应用程序实现的结果,还是上述属性是成为 monad 的先决条件?

这种更高层次的推理对我来说都是全新的,但以我对 FP 的有限理解,我可以拥有一种验证数据类型,该验证数据类型在用作应用程序时具有一种行为(累积无效值),而在用作 monad 时具有另一种行为(快速失败)。


你已经把所有的部分都做好了。是的,一个合法的 monad 实例Validation是可能的。问题是它会产生两个不同的Applicative的实例Validation:一个累积错误,另一个源自 monad 实例并快速失败。这将导致类型类不一致:程序行为取决于类型类实例的到达方式。

你提到的房产,

x <|*|> y === x >>= (a => y map ((a, _)))

可以作为定义<|*|>按照>>= and map,因此对于从 Monad 派生的 Applicative 自动成立。问题是已经有一个不同的 Applicative 具有不同的行为<|*|>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么验证会违反单子定律? 的相关文章

随机推荐

  • 如何将 nohup 输出重定向到指定文件?

    我从其他示例中尝试过的所有内容似乎都不起作用 我正在尝试使用 nohup 运行我的应用程序 但将应用程序的输出附加到文件中 我尝试过以下一些方法 这些似乎都不起作用 nohup dotnet application dll gt out l
  • WCF 中的 HttpContext

    为了使用 httpContext 我更改了 app config 并添加了
  • PHP字典类?或者替代方案?

    基本上 我正在寻找的是某种在 PHP 中实现字典的类或方法 例如 如果我正在构建一个单词解密器 假设我使用了字母 a e l p p 排列的可能性是巨大的 我如何只显示那些实际的单词 苹果 苍白等 Thanks 经典的单词查找问题可以使用以
  • 实体框架创建空迁移,但坚持认为我的模型不同

    今天是悲伤的一天 今天我看到的第一件事是 EF 异常说 自数据库创建以来 支持 DomainContext 上下文的模型已发生变化 已经接近午夜了 我仍然看到这个错误 这是我职业生涯的终结 我很确定模型中没有任何变化 但错误却出现了 我尝试
  • 如何阻止 Apache 中的特定用户代理

    我正在配置我的 Django 应用程序以通过电子邮件向我发送错误 异常 通常没有问题 但我的电子邮件托管在 Office 365 上 并且 Microsoft 似乎会自动扫描和加载电子邮件中的 URL 结果是它命中了我的 Django 应用
  • PHP 检测文件系统编码/保存具有非拉丁文件名的文件

    我需要使用 PHP 将非拉丁文件名的文件保存在文件系统上 我想让这个工作跨平台 我如何知道可以使用什么编码来写入文件 我知道许多现代文件系统都是基于 UTF 8 的 这是正确的吗 但我怀疑 Windows XP 是基于 UTF 8 的 那么
  • 为什么setContextClassLoader()方法要放在Thread上呢?

    为什么是setContextClassLoader 方法置于Thread 什么不同的线程有不同的类加载器 问题是如果我延长一个ClassLoader 加载了一些新类 到我的自定义类加载器 现在 我希望它成为上下文类加载器 所以我调用该方法T
  • AtomicInteger 等原子包类如何工作

    我读过 使用原子包类使我们能够进行线程安全 无锁编码 但我不太确定原子包类中的方法在不使用锁或任何同步关键字的情况下如何提供线程安全性 任何帮助都将不胜感激 他们使用非常低级的指令 例如比较和交换 以及来自的多种其他方法sun misc 不
  • CONNECTIVITY_ACTION 的 BroadcastReceiver 始终在intent.getExtras() 中返回 null

    我正在尝试接收来自 CONNECTIVITY ACTION 的广播消息 register BroadcastReceiver on network state changes final IntentFilter mIFNetwork ne
  • python 以什么顺序显示字典键? [复制]

    这个问题在这里已经有答案了 gt gt gt D a 1 b 2 c 3 gt gt gt D a 1 c 3 b 2 我刚刚在 Python shell 中执行了此操作 我只是想知道为什么键 c 会在键 b 之后 该顺序与它们内部的工作方
  • jQuery.validator.unobtrusive.adapters.addMinMax 往返,在 MVC3 中不起作用

    我正在使用 DataAnnotations jQuery validate 和 jquery validate unobtrusive 创建一个日期范围验证器 我已经阅读了以下内容 http bradwilson typepad com b
  • 观察类中静态变量的值?

    我有一堂课 有一个static var存储当前在线连接状态的位置 我想观察的价值ConnectionManager online通过其他课程 我想这样做KVO 但声明一个static变量为dynamic导致错误 class Connecti
  • 如何完全更改 tkinter.ttk Treeview 上的背景颜色

    我一直在尝试为我最近使用 tkinter 在 python 3 4 4 中开发的一个项目制作一个目录浏览器 我不希望背景成为默认颜色 因此我已经开始更改大多数小部件的背景 直到到达Treeview 之前我没有遇到任何麻烦 我不太擅长 ttk
  • 如何使用 CSS 轻松地将

    这个问题在这里已经有答案了 我正在尝试水平居中 div 页面上的块元素并将其设置为最小宽度 最简单的方法是什么 我想要 div 元素与页面的其余部分内联 我将尝试画一个例子 page text page text page text pag
  • JavaScript:“文档”和“HTML”之间有什么区别

    Example document click function blah and html click function blah 我将分几个部分来回答这个问题 在 JavaScript 不仅仅是 jQuery 而是所有 JavaScrip
  • 在Python脚本中检测相似文档的算法[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我需要编写一个模块来检测类似文档 我读过很多关于文档指纹技术等的论文 但我不知道如何编写
  • Android - 可绘制重复形状来创建图案

    我需要创建一个图案来设置为某些背景View 我希望该模式看起来像这样 我不想将任何图像导入到可绘制对象中 而是想创建自己的形状 图层列表 最终目标是有一个图案作为背景 是否可以在不导入任何外部图像的情况下实现这一目标 您可以通过创建自定义形
  • verifyError - 验证者拒绝类

    我正在开发 2 2 minSdkVersion 8 突然我收到这个错误 arbitrarily rejecting large method regs 75 count 28584 rejected Lcom Demo Loyalty Se
  • 角度材质表字母数字排序行为

    我在角度材质表中遇到问题 尽管它在技术上是正确的 但我在想是否有另一种方法可以解决这个问题 假设我有 5 个代码 F1 F2 F5 F9 F10 角度材质表升序排列顺序将是 F1 F10 F2 F5 F9 但我期待它是 F1 F2 F5 F
  • 为什么验证会违反单子定律?

    On SO解释了为什么 scalaz cats Scala 或 Arrow Kotlin 中的 Validation 不能是 monad 据我了解 这是因为他们根据应用函子对单子进行了建模 并且作为应用的验证的所需行为 收集所有无效值 与作