使自定义 monad 转换器成为 MonadError 的实例

2024-04-24

我想让我的 monad 转换器成为一个实例MonadError如果转换后的单子是一个实例。基本上我希望我的变压器的行为与内置变压器一样,例如有一个MonadError实例为StateT:

MonadError e m => MonadError e (StateT s m)

我尝试这样做:

instance MonadError e m => MonadError e (MyMonadT m)

但是 GHC 开始抱怨不可判定的实例,显然 MTL 库只是启用了不可判定的实例,但是有什么方法可以避免这种情况吗?或者在这种情况下就可以了,不会造成任何问题?


This is basically fine. UndecidableInstances isn't all that scary; all it means is that the compiler could, instead of finding an instance, go into an infinite loop. That sounds pretty bad, until you realise that GHC actually has a limit to the number of steps it'll take to find an instance; nothing will go wrong unless you write a bad instance, and the error messages you get will generally make it very obvious what's gone wrong.1 Certainly it's a lot less scary than things like OverlappingInstances (or worse, IncoherentInstances).

它抱怨的原因是因为MonadError具有函数依赖性m to e。这意味着选择m决定什么e必须是;即每个m仅与一个相关联e。对此(覆盖条件)的检查是保守的,因此很容易遇到这样的问题,您尝试“向下递归一个级别”来指定e.

1 It'll list all the instances it looked at to try and find the one it's looking for, so you'll see a bunch of repeating lines. But usually you won't even run into trouble like this in the first place.

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

使自定义 monad 转换器成为 MonadError 的实例 的相关文章

随机推荐

  • 如何使用在单击按钮上创建的用户触发图表中的放大和缩小?

    我正在构建一个角度应用程序 其中我们需要创建用于放大和缩小图表的单击按钮 我们可以使用可悬停模式栏上的按钮放大缩小图表 但这对于我们的应用程序来说不是必需的 我们希望使用通过单击按钮创建的用户来放大和缩小图表 有没有办法使用单击按钮触发可悬
  • Electron如何拦截http响应体

    有什么办法可以拦截BrowserWindow主进程中的http响应主体没有调试器 是否无法使用WebRequest类和onCompleted method 我可以使用调试器做到这一点 但由于某种原因我不能使用它 await w webCon
  • 在 Eclipse (Spring Source) 中,Grails 始终以生产模式构建

    当在 Grails 项目中使用 Eclipse 时 战争的构建似乎陷入了生产模式 如果您想部署到附加的 tcServer 您只需右键单击您的项目 然后选择 运行方式 gt 在服务器上运行 如果您将 grails 项目设置为 dev 右键单击
  • 气流:Dag 每隔几秒安排两次

    我尝试每天仅运行一次 DAG00 15 00 午夜 15 分钟 然而 它被安排了两次 间隔几秒钟 dag DAG my dag default args default args start date airflow utils dates
  • 显式语义分析

    我遇到了这个术语 显式语义分析 它使用维基百科作为参考 找到文档中的相似性并将它们分类 如果我错了 请纠正我 我遇到的链接是here http www cs technion ac il gabr resources code esa es
  • 十进制铸造

    我有一个这样的十进制数 62 000 0000000 我需要将该小数转换为 int 它的小数总是为零 所以我不会失去任何精度 我想要的是这样的 62 000 存储在 C 中的 int 变量中 我尝试了很多方法 但它总是给我一个错误 字符串的
  • Python列表来存储类实例?

    给定一个 python 类class Student 和一个清单names 然后我想创建几个实例Student 并将它们添加到列表中names names For storing the student instances class St
  • 如何将html页面的动态内容转换为pdf

    在 html 页面中 一些标签是使用 jquery 动态创建的 内容是使用 jquery 和 php 从 msql 数据库加载的 我想将这个动态页面转换为pdf 我尝试过以下代码 但它生成 html 页面静态部分的 pdf html cod
  • 在 C++ 中正确地将 `void*` 转换为整数

    我正在处理一些使用外部库的代码 您可以在其中通过void value 不幸的是 前一个处理此代码的人决定通过将整数转换为 void 指针来将整数传递给这些回调 void val 我现在正在努力清理这个混乱 并且我正在尝试确定将整数转换为整数
  • 估计命令如何查找 R 公式中的变量名称?

    我想使用 R 来估计大量模型nls 函数作用于用户定义的函数 由于许多变量在我的规范中是固定的 我想要一种在我的函数中预先设置它们的方法 但我没有正确理解 R 如何在公式中包含的函数中查找变量 我看过 Hadley Wickham 的高级
  • 我无法获取 servlet 页面中的 POST 值?

    我无法在 servlet 页面中获取 POST 值 我之前的问题与这个问题相关 如何从servlet页面中的ajax请求获取数据 https stackoverflow com questions 6042177 how to get th
  • 如何找到已安装的pandas版本

    我在使用 Pandas 的某些功能时遇到问题 如何查看我的安装版本是什么 Check pandas version In 76 import pandas as pd In 77 pd version Out 77 0 12 0 933 g
  • pytorch 中的 autograd 可以处理同一模块中层的重复使用吗?

    我有一层layer in an nn Module并在一次中使用两次或多次forward步 这个的输出layer稍后输入到相同的layer pytorch可以吗autograd正确计算该层权重的梯度 def forward x x self
  • 在应用程序启动时禁用 Windows 服务

    因为我必须在应用程序启动时关闭 Windows 高级文本服务 有什么特殊的API吗 它适用于具有默认权限的用户吗 该问题的标题是 禁用 Windows 服务 但答案都告诉我们如何停止服务 您在 Google 上会发现的大部分内容是 您可以使
  • 无法在 gae 中运行简单的 helloworld (python 2.7)

    我正在尝试运行官方你好世界 https shadyabhi github com shadyabhi helloworld gitgoogle appengine 1 6 4 中用于 python 2 7 的程序 无法运行一个简单的 hel
  • IOCP AcceptEx 在连接时未创建完成

    我目前正在尝试一些用于套接字编程的新库 IOCP 我偶然发现了AcceptEx http msdn microsoft com en us library windows desktop ms737524 28v vs 85 29 aspx
  • 在 Apps 脚本中对同一工作表使用 Google Sheets API

    通过 SpreadsheetApp 全局 使用绑定到电子表格的 Apps 脚本来影响电子表格非常简单 但是 有一些功能 例如在工作表上获取 设置过滤器 只能通过 Google Sheets REST API 访问 我见过一个在 Apps 脚
  • 如何将 Red5 与 Asp.net 结合使用

    我想在线录制语音 我想我需要使用FMS或Red5 但我不知道如何将Red5与Asp net一起使用 实际上这是我第一次尝试处理这样的事情 目前我是一名 net开发人员 所以请有人告诉我一种处理它的方法 并告诉我如何将 Red5 与 Asp
  • 正则表达式:如何匹配包含重复模式的字符串?

    是否有一个正则表达式模式可以匹配包含重复模式的字符串 例如 a b c d y z 你有什么主意吗 也许您正在寻找这样的东西 这将匹配以逗号分隔的表单序列列表 where and 可以是任何字符
  • 使自定义 monad 转换器成为 MonadError 的实例

    我想让我的 monad 转换器成为一个实例MonadError如果转换后的单子是一个实例 基本上我希望我的变压器的行为与内置变压器一样 例如有一个MonadError实例为StateT MonadError e m gt MonadErro