我可以自动实现类吗?

2023-11-21

在斯卡拉兹每Monad实例自动是一个实例Applicative.

implicit val listInstance = new Monad[List] {
  def point[A](a: => A) = List(a)
  def bind[A, B](fa: List[A])(f: A => List[B]) = fa flatMap f
}

List(2) <*> List((x: Int) => x + 1) // Works!

另一个例子:Arrow自动是一个Profunctor.

然而,在 Haskell 中我必须提供一个实例Applicative对于每一个Monad一次又一次。

是否可以避免这种重复性的工作呢?


当有两个地方可以派生时就会出现问题Applicative实例。例如,假设m是类型a b where Arrow a。然后有一个明显的例子Applicative也从这个定义来看。编译器应该使用哪一个?当然,结果应该是一样的,但 Haskell 无法检查这一点。通过让我们写出实例,Haskell 至少迫使我们思考定义的一致性。

如果你想要的话,这里有WrappedMonad班级在Control.Applicative,它为所有明显的实例提供了newtype包装器,但使用WrapMonad and unwrapMonad一直也没有那么有吸引力。

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

我可以自动实现类吗? 的相关文章

  • 在 scalaz 中免费实施

    Haskell 中的免费实现是 data Free f a Pure a Free f Free f a 而 Scalaz 中的实现是 sealed abstract class Free S A private case class Re
  • yesod——密码保护临时站点

    我正在尝试设置 yesod 网络服务器的临时实例 我想知道是否有一些简单的方法可以使整个站点受到密码保护 具体来说 我希望能够提示那些导航到我的网站的人提供凭据 经过身份验证后 它应该像典型站点一样运行 但如果他们无法验证自己的身份 他们就
  • 在 Haskell 中等待然后检测按键的简单方法是什么?

    我对 Haskell 还很陌生 所以我正在寻找一种简单的方法来检测按键 而不是使用getLine 如果有人知道任何库 或者知道一些这样做的技巧 那就太好了 如果有更好的地方可以问这个问题 请直接告诉我 我将不胜感激 如果您不想阻止 可以使用
  • 为什么 GeneralizedNewtypeDeriving 没有安全的 Haskell?

    来自 GHC 手册 第安全语言 http www haskell org ghc docs 7 6 2 html users guide safe haskell html safe language 模块边界控制 使用安全语言编译的 Ha
  • 如何在 blaze-html 中渲染 blaze-svg 标记

    我想将使用 blaze svg 生成的 svg 图直接包含在使用 blaze html 生成的 html 中 两者都基于 blaze markup 所以我希望它很容易 diagram1 Svg diagram1 try1 Html try1
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 如何在 TH 拼接中复制 'name 的行为

    考虑这个 Haskell 文件 LANGUAGE TemplateHaskell OPTIONS GHC fplugin Test Inspection Plugin module Text main where import Test I
  • 如何找到仅是 2、3 和 5 的幂的倍数的所有数字的列表? [复制]

    这个问题在这里已经有答案了 I am trying to generate a list of all multiples which can be represented by the form where a b and c are w
  • 如何组合过滤条件

    过滤器类函数接受一个条件 a gt Bool 并在过滤时应用它 当您有多个条件时 使用过滤器的最佳方法是什么 使用了应用函数 liftA2 而不是 liftM2 因为出于某种原因我不明白 liftM2 在纯代码中如何工作 liftM2 组合
  • 对元组列表进行排序的函数 - Haskell

    抱歉 这个简单的问题只是我对 haskell 非常陌生 我正在尝试编写一个函数 order 它将对另一个函数 Frequency 生成的元组列表进行排序 频率计算列表中不同元素的数量 a给出一个这样的结果 比如 gt 频率 aabbbccc
  • 反应性香蕉时间延迟

    我已经查阅了文档反应香蕉 http hackage haskell org package reactive banana 而且我找不到指定明确时间延迟的方法 举例来说 我想采取Event t a并将其所有发生的事件移至未来 1 秒 或获取
  • 如何处理“恐慌:不可能的事情发生了”并在 Haskell 中继续

    我有以下代码 它使用 GHC API 加载模块并获取表达式的类型 typeObjects String gt String gt IO Type typeObjects modules objects do defaultErrorHand
  • 有没有办法在 Emacs 中使用 Djinn 自动生成 Haskell 代码?

    标题几乎说明了一切 我正在寻找这样的东西 f Int gt Bool gt Int f body Djinn 可以使用定理证明来通过证明该类型存在来生成此类函数的代码 我想知道 是否有现有的方法可以从 Emacs 中获取此功能 因此 我不需
  • 如何处理在组合下发生变化的类型?

    我最近读了一篇非常有趣的论文单调性类型 https infoscience epfl ch record 231867 files monotonicity types pdf其中描述了一种新的 HM 语言 该语言可以跟踪操作之间的单调性
  • 简单的秒差距示例会产生类型错误

    我正在尝试编译这个简单的秒差距代码 import Text Parsec simple letter 但我不断收到此错误 No instance for Stream s0 m0 Char arising from a use of let
  • 为什么解析器组合器“seq”用“bind”和“return”定义?

    我正在读这个article http eprints nottingham ac uk 237 1 monparsing pdf关于解析器组合器并且不理解以下内容 他们说使用seq 见下文 导致解析器将嵌套元组作为结果 操作起来很混乱 se
  • 如何避免编写这种类型的 Haskell 样板代码

    我经常遇到这种情况 这很烦人 假设我有一个 sum 类型 它可以保存一个实例x或一堆其他无关的事情x data Foo x X x Y Int Z String other constructors not involving x 要声明
  • 如何处理或避免BlockedIndefinitelyOnSTM异常?

    我花了很多时间来解决我正在处理的应用程序中遇到的问题 该应用程序是一个 Web 应用程序 使用 scotty 公开 REST 端点 它使用一个TVar保持其更新的状态STM a由前端层触发的动作 由于该应用程序基于事件溯源原则 因此业务层生
  • 在一元上下文中使用 Data.Map

    我正在操作的地图具有单子键 类型为IO Double 我需要使用findMax在这张地图上 我可以用吗liftM为了这 Map findMax Map fromList f x X f y Y f z Z Here f x有类型IO Dou
  • Haskell 中的多态函数作为参数

    我有一个带有两个构造函数的 ADT 一个包裹着一个Double和一个包裹着Integer 我想创建一个函数 它采用一元函数Numtypeclass 并返回一个函数 该函数将该一元函数应用于我的 ADT 的内容 我试过这个 data X Y

随机推荐

  • 刷新 QueryTable 抛出“常规 ODBC 错误” - VBA Excel 2011 for Mac

    编辑 发现新错误 我可能刚刚发现为什么我的脚本不再起作用了 最近有一个 Office 更新 似乎他们已经实现了 microsoft 查询 它摆脱了我根据需要安装和配置的 ODBC 管理器 现在实际的问题可能是这个微软查询没有 UNICODE
  • 在R中计算加权多边形质心

    我需要根据单独的人口网格数据集计算一组空间区域的质心 感谢您在下面的示例中指导如何实现这一目标 提前致谢 require raster require spdep require maptools dat lt raster volcano
  • 如何使用 fstream 在 C++ 中追加文件? [复制]

    这个问题在这里已经有答案了 我尝试用 C 附加文件 启动时文件不存在 操作后 文件中只有一行而不是五行 此方法调用了 5 次 看起来文件正在创建 接下来每个写操作文件都被清除并添加新字符串 void storeUIDL char uidl
  • 如何使用 Enter 键作为事件处理程序 (javascript)? [复制]

    这个问题在这里已经有答案了 我试图进行自己的聊天 所以我有一个输入文本字段 提交按钮 甚至不是提交 它只是一个按钮 所以当按下回车键时 我需要的值输入字段出现在我的文本区域 只读 好吧 长话短说 我只想要一个基本的输入键事件处理程序 我知道
  • 来自另一张纸的条件格式

    我试图让工作表 A 上的一个单元格检查它是否 gt 或 A1 gt SheetB A1 但似乎不起作用 我使用绿色表示 gt 使用红色表示 是不是函数错了 或者是否不可能有条件格式甚至跨工作表搜索 由于某种原因 我承认我真的不知道为什么 条
  • 当 Ctrl+Cing 从无限循环中设置 -fbreak-on-exception 时,GHCi 挂起

    正如标题所示 我在 GHCi 中创建了一个无限循环 f x x 2 g x if f x lt x then g f x 2 else x g 2 通常按 Ctrl C 会产生 中断 并返回 GHCi 提示符 如果我 set fbreak
  • 访客模式,访客选择如何遍历

    据我了解 在Visitor模式的典型规范中 是被访问的对象决定如何遍历 而且一般只支持一种遍历顺序 参见 例如 here or here 是否有一个与双重调度相同的用途的名称 但访问者可以决定如何遍历对象层次结构 在我的应用程序中 一个非常
  • Swift 替换字符串中的第一个字符

    一个非常简单的问题 如何替换字符串的第一个字符 我可能做错了一些事情 但我就是无法让它发挥作用 我已经尝试过这个 var query url query stringByReplacingOccurrencesOfString withSt
  • Windeployqt 错过了一些库并获取了其他不需要的库

    通常要部署 Qt 项目 我要么 继续运行它并找到它抱怨丢失的库并添加它们 直到不再有为止 使用 dependency walker 完成大部分 如果不是全部 然后返回到选项 1 或者只是创建一个静态链接版本 有时会很痛苦 所以我现在想尝试w
  • 将 Python 数据结构输出到 reStructuredText 有哪些方法

    我有一个 Python 元组列表 我想将其输出到 reStructuredText 中的表中 docutils 库对将 reStructuredText 转换为其他格式有很大的支持 但我想直接从内存中的数据结构写入 reStructured
  • 为多项目中的子项目指定不同版本的 sbt?

    我有一个包含几个子项目的多项目 根项目的project build properties包含 sbt version 0 13 0 事实证明 其中一个子项目仅适用于该版本0 12 4由于依赖性问题 I put build propertie
  • “多可用区部署”和“只读副本多可用区部署”之间的区别

    Summary Amazon RDS 有两种主要不同类型的副本 多可用区副本和只读副本 很容易发现它们的区别 不过 只读副本已于 2018 年 1 月支持多可用区部署 多可用区部署 和 只读副本版本多可用区部署 之间的主要区别是什么 在当前
  • python 中的二维列表数组

    我正在尝试创建一个二维矩阵 以便每个单元格都包含一个字符串列表 矩阵尺寸在创建之前是已知的 我需要从一开始就访问任何元素 而不是动态填充矩阵 我认为需要某种预先分配空间 例如 我想要一个 2X2 矩阵 A B C d e f f 支持传统的
  • 访问 Thread.Start() 委托函数的返回值

    我有一个通过 Thread Start 执行方法的程序 该方法有一个我想访问的返回值 有没有办法做到这一点 这是一个样本 var someValue Thread t new Thread delegate someValue someOb
  • RestTemplate 设置每个请求的超时时间

    我有一个 Service有多种方法 每种方法使用不同的 Web api 每个调用都应该有一个自定义的读取超时 拥有一个 RestTemplate 实例并通过每个方法中的工厂更改超时是否是线程安全的 HttpComponentsClientH
  • android_stubs_current_intermediates目录中的.java文件是如何生成的?

    Android 构建过程为 android jar 中的每个类生成 Java 存根 并将它们存储在以下目录中 out target common obj JAVA LIBRARIES android stubs current interm
  • 通过 PHP-FPM 运行命令行 PHP

    目前 我将 PHP FPM 与 NGINX 一起用于前端请求 但也通过长时间运行的 PHP 脚本运行一些后台进程 使用 exec 使用命令行 PHP 运行其他脚本 但我在想的是 如果这些也通过 PHP FPM 运行 效率会更高吗 关于我如何
  • 错误“_OBJC_CLASS_$_AppDelegate”,引用自:“和错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”

    我对开发还很陌生 我遇到了这个错误 如果我的 AppDelegate 文件中缺少某些内容 我不会担心 所以我会向您展示这些文件 h 文件 import
  • 如何包含需要绝对路径的PHP文件?

    我有一个如下的目录结构 脚本 php inc include1 phpinc include2 php 对象 object1 php对象 object2 php 肥皂 soap php 现在 我在两个中都使用这些对象script php a
  • 我可以自动实现类吗?

    在斯卡拉兹每Monad实例自动是一个实例Applicative implicit val listInstance new Monad List def point A a gt A List a def bind A B fa List