Haskell 版本的 Idris !-表示法(爆炸表示法)

2023-12-24

我最近有幸学习了一些 Idris,我发现非常方便的一件事是!-符号 https://idris2.readthedocs.io/en/latest/tutorial/interfaces.html?highlight=do%20notation#notation,这让我可以缩短 do 块内的单子代码,例如

a' <- a
b' <- b
c' <- c
someFunction a' b' c'

到更好的

someFunction !a !b !c

现在,当我在 Haskell 中编写代码时,我正在寻找类似的东西,但据我所知它不存在(并且 bang 字符显然已经用于严格的模式匹配)。有什么方法可以避免在 do 块内出现一堆琐碎的左箭头吗?也许是添加重写规则的扩展,或者类似的东西?


由于每个单子都是一个Applicative(GHC >= 7.10)我们可以写

someFunction <$> a <*> b <*> c

请注意,如果someFunction返回类型的一元值m T,上面将返回m (m T),这可能不是我们想要的(正如@pigworker 在下面指出的那样)。然而我们可以join两层在一起:

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

Haskell 版本的 Idris !-表示法(爆炸表示法) 的相关文章

随机推荐

  • Node.js Cheerio 解析器破坏了 UTF-8 编码

    我用 Cheerio 解析我的请求 如下所示 var url http shop nag ru catalog 16939 IP videonablyudenie OMNY 16944 IP kamery OMNY c vario obek
  • NoneType'对象没有属性'find_all'出现错误

    我当时是网scraping使用 Beautiful Soup 的 Wikipedia 表 这是我的代码 Code URL https en wikipedia org wiki List of most viewed YouTube vid
  • 如何使用 Amazon S3 配置 django-compressor 和 django-staticfiles?

    我正在尝试设置Django 压缩器 https github com jezdez django compressor and django 静态文件 https docs djangoproject com en dev howto st
  • RoomDatabase_Impl 不存在

    当我尝试实现房间数据库时 出现以下错误 java lang RuntimeException cannot find implementation for com udacity gradle builditbigger Database
  • 如何优化给定的 db2 查询,

    考虑如下我的 DB2 查询 Select something from some tables select something from some tables where bhla bhla Unionall select someth
  • 如何在GtkTreeview中用字符串和pixbuf制作一列?

    我正在使用 Gtk 2 的应用程序中工作 我需要实现一个文件树视图 实际的代码是 public FileTree store new TreeStore 2 typeof string typeof string this change d
  • 定义一组(初始)Haar Like 特征

    当谈到级联分类器 使用类似 haar 的特征 时 我总是读到像 AdaBoosting 这样的方法用于选择 最佳 特征进行检测 然而 这仅在有一些初始功能集开始增强时才有效 给定 24x24 像素图像 有 162 336 个可能的 haar
  • 如何通过 Objective C 上传文件?

    我想问一个关于 iPhone 上的 Objective C 的问题 我想上传一个文件 实际上我将所有数据存储在 NSString 中 到服务器 但是 我不知道该怎么做 我查过Apple Developer的网站 我知道有一个函数叫做conn
  • 在sql server中将字符串转换为日期

    我如何转换YYYY MM DD 2012 08 17 到 SQL Server 中的约会 我在帮助页面上没有看到这种格式 http msdn microsoft com en us library ms187928 aspx http ms
  • Java 中的 Mysql 连接:用户 @ localhost 的访问被拒绝

    我无法连接到数据库 但我不知道为什么 因为用户名和密码是正确的 并且我可以在本地通过 phpmyadmin 连接 Class forName com mysql jdbc Driver Setup the connection with t
  • 如何实现数据表“分组依据”?

    我想为我的数据表实现 分组依据 有人有什么建议吗 update 时间 2019 03 09 标签 c net 2 0 您可以在 System Data DataSetExtensions 程序集中使用 linq 扩展 DataTable t
  • 如何找到距直线给定垂直距离处的点?

    我在窗口中画了一条线 然后让用户拖动它 因此 我的线由两点定义 x1 y1 和 x2 y2 但现在我想在线条的末端绘制 帽子 即在每个端点处绘制短垂直线 上限的长度应为 N 像素 因此 要在端点 x1 y1 处绘制 帽 线 我需要找到形成垂
  • react-native-reanimated 不接受以度为单位的旋转值

    我正在学习 reanimated 因为它在 UI 线程上工作 并且我想实现旋转动画 以度数旋转 如 45 度 不起作用并提示错误 那么如何在react native reanimation v1 version 1 中实现旋转动画呢 也许你
  • 无法使用 mongodb 插件版本 3.0.3 运行 Grails 应用程序

    我正在尝试将我的 mongodb 插件从 2 0 1 升级到 3 0 3 但是我不断收到以下错误 java lang NoClassDefFoundError com mongodb AggregationOptions at java l
  • spring security如何检索用户名[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Spring Security 时 获取 bean 中当前用户名 即 SecurityContext 信息的正确方法是什么 https stackoverflow com questions 2
  • “奇怪的重复模板模式”的实际用途

    的一些实际用途是什么 奇怪的重复模板模式 http en wikipedia org wiki Curiously Recurring Template Pattern 这 计算类 http en wikipedia org wiki Cu
  • 如何重置 powershell 颜色

    我更改了 powershell 的颜色 现在我无法更改输入文本的颜色 总是yellow 我改变了背景的颜色和文字的颜色 背景颜色已正确更改 但显示文本中的颜色仍然是黄色 我可以做一些事情来重置颜色吗 方法一 CLI 命令 此 CLI 重置控
  • AngularJS reloadOnSearch 不起作用

    执行搜索并导航离开后 我希望用户能够返回到搜索页面 通过在浏览器中返回 并保留当前的搜索参数 我开始意识到 为了做到这一点 必须更新页面 url 以包含有关页面的数据 通过研究 我发现我可以使用更新位置 location并在使用进行更改时强
  • INSERT 触发器带有“ON CONFLICT DO NOTHING”

    我有一个INSERTPostgres 9 5 中的语句 但由于关键冲突 INSERT 有时实际上不会发生 我已经设置ON CONFLICT DO NOTHING在插入 If the INSERT发生了 那么触发器当然会运行 但如果INSER
  • Haskell 版本的 Idris !-表示法(爆炸表示法)

    我最近有幸学习了一些 Idris 我发现非常方便的一件事是 符号 https idris2 readthedocs io en latest tutorial interfaces html highlight do 20notation