“|”是什么for 在 Haskell 类定义中?

2023-11-30

我无法弄清楚“| m -> w”部分在这样的类定义中意味着什么:

class (Monoid w, Monad m) => MonadWriter w m | m -> w

这会向类定义添加哪些附加信息?


竖线是语法分隔符,本身没有任何意义,用于引入函数依赖在多参数类型类上,所以从技术上讲|没有任何意义。想必|被选择作为对相同符号的使用的视觉类比图案卫士关于功能。

至于函数依赖本身,只需阅读x -> y作为“类型参数x唯一确定类型参数y”,意思是知道x仅凭这一点就足以找到正确的实例。还有更多的复杂情况,特别是在启用其他 GHC 扩展的情况下,但大多数时候您不需要担心它们。

相反,如果没有函数依赖性,选择多参数类型类的实例需要知道所有类型参数。一个典型的例子有一个参数是容器类型,第二个参数是所包含元素的类型;诸如“concatenate”或“isEmpty”之类的函数不需要提及元素类型,只需提及容器类型,因此会产生歧义。

另外,如果您正在编写自己的类型类,请考虑使用类型家族,这是一种最终可能取代函数依赖的新方法。粗略地说,类型族让你可以超载地编写类型定义在实例内部,而不仅仅是重载函数。

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

“|”是什么for 在 Haskell 类定义中? 的相关文章

  • Haskell printf 转字符串

    Haskell 中有等效的 sprintf 吗 我需要将双精度值转换并格式化为字符串 有没有其他方法而不使用printf什么样的功能 主要问题是要避免 Prelude gt putStrLn myDoubleVal 1 7944444444
  • 计算两点之间的距离(Haskell)

    给定两个元组的输入 我希望能够使用以下公式计算两点之间的距离 距离 sqrt x1 x2 2 y1 y2 2 所以我希望函数调用和输出如下所示 gt distance 5 10 3 5 5 385 当我尝试运行下面的代码时 它告诉我输入 w
  • 列表理解:制作列表列表

    你好 我正在尝试在 haskell 中创建一个函数 该函数接受一个数字 a 使用列表 即数字 将其一部分4它会创造 1 1 1 1 1 1 2 1 3 2 2 4 我正在考虑使用列表理解来创建列表 x 然后使用 1 n 中的数字创建更多列表
  • 如何找到仅是 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
  • SyntaxError:创建类实例时语法无效[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在 Python shell 3 3 2 中运行这段代码 但它给了我SyntaxError invalid syntax cla
  • 我不喜欢这个……这是欺骗语言吗?

    我已经见过几次类似下面的东西了 我讨厌它 这基本上是在 欺骗 语言吗 或者 您是否认为这是 可以 因为 IsNullOrEmpty 始终首先被评估 我们可能会争论一个字符串从函数中出来时是否应该为 NULL 但这并不是真正的问题 strin
  • 如何组合过滤条件

    过滤器类函数接受一个条件 a gt Bool 并在过滤时应用它 当您有多个条件时 使用过滤器的最佳方法是什么 使用了应用函数 liftA2 而不是 liftM2 因为出于某种原因我不明白 liftM2 在纯代码中如何工作 liftM2 组合
  • 存在函数依赖关系时类型推断如何工作

    考虑下面的代码 LANGUAGE MultiParamTypeClasses FlexibleInstances FunctionalDependencies UndecidableInstances FlexibleContexts cl
  • 为什么 exceptT 没有 MonadMask 实例?

    爱德华 克梅特例外情况图书馆不提供单子掩码 https www stackage org haddock lts 7 18 exceptions 0 8 3 Control Monad Catch html t MonadMask实例为Ex
  • 有没有办法在 Emacs 中使用 Djinn 自动生成 Haskell 代码?

    标题几乎说明了一切 我正在寻找这样的东西 f Int gt Bool gt Int f body Djinn 可以使用定理证明来通过证明该类型存在来生成此类函数的代码 我想知道 是否有现有的方法可以从 Emacs 中获取此功能 因此 我不需
  • 简单的秒差距示例会产生类型错误

    我正在尝试编译这个简单的秒差距代码 import Text Parsec simple letter 但我不断收到此错误 No instance for Stream s0 m0 Char arising from a use of let
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • 为什么 Haskell 中的点是从右向左排列的?

    如果我们有两个函数 f and g 然后在哈斯克尔h f g相当于h x f g x IE 这些函数从右到左应用于输入 有什么根本原因可以解释为什么它是从右到左 而不是从左到右吗 IE 他们为什么不做h f g相当于h x g f x 反而
  • 没有由文字“1”产生的 Num String 实例

    main do putStrLn myLast 1 2 3 4 myLast a gt a myLast x x myLast xs myLast xs 当我尝试运行此代码时 我收到此消息 没有由文字 1 产生的 Num String 实例
  • C#中global::关键字的用法是什么?

    有什么用global C 中的关键字 什么时候我们必须使用这个关键字 从技术上来说 global不是关键字 它是所谓的 上下文关键字 它们仅在有限的程序上下文中具有特殊含义 并且可以在该上下文之外用作标识符 global每当有歧义或成员被隐
  • 澄清Update() 和FixedUpdate() 的使用? Unity2D [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 所以我知道FixedUpdate应该用于物理操作等 但我很难理解什么算作物理 例如 我通过查看按下的键来移动角色 然后施加力 目前我正
  • Haskell 中的所有图形和 Web 库是如何实现的?

    我才开始学习Haskell 我读到它是一种纯函数式语言 其中的所有内容都是不可变的 因此 输入输出 写入和读取数据库之类的事情会导致状态的可变性 我知道 Haskell 中有一种叫做 monad 的东西 它允许在 Haskell 中使用命令
  • Haskell:从后面访问列表

    今天我开始学习Haskell 我对函数式语言有点陌生 而且我非常喜欢 Haskell 然而 我有一个关于它的设计的问题困扰着我 从我到目前为止的理解来看 访问列表后面的元素似乎比访问前面的元素要复杂得多 类似于xs x where xs a
  • 返回“!”是什么意思?铁锈中的意思是什么?

    最近我在 Rust 中发现了一个返回的函数 而不是基本类型 如下所示 fn my function gt 这是什么意思 我无法在中找到有关此的信息锈迹斑斑的书 https doc rust lang org book 该函数使用此类指标返回
  • 用纯函数式语言保持状态

    我正在尝试弄清楚如何执行以下操作 假设您正在开发直流电机的控制器 您希望让它以用户设置的特定速度旋转 def set point ref sp 90 while true let curr read speed controller set

随机推荐

  • DataTables 警告 - 请求第 0 行、第 0 列的未知参数“0”

    我使用 jQuery DataTable 来显示使用存储过程和 Web 服务从数据库获取的数据 我可以使用 Fiddler 运行 SP 或服务 但是当涉及到填充 DataTable 时 我收到了错误记录here 在我的具体情况下 消息是 D
  • 我如何使用注释进行聚合,如 @Query(value = "{"query":""}")

    如何使用注释通过 spring data elasticsearch 进行像 Query value query 这样的聚合 你不能用 Query注释的唯一目的是发送查询 而不是聚合 使用 Spring Data Elasticsearch
  • 将字符串替换为 DataTable 的 DataColumn 中的另一个字符串

    I have DataTable它检索多列和行 其中一栏 评论 包含数据 我想用 n dtOutput Generix getTickets DateTime Parse 1 1 1900 DateTime Now iTicket iDis
  • android:安装应用程序无需用户干预

    我想在 Android 上安装应用程序而无需用户干预 我正在使用权限INSTALL PACKAGES我正在将应用程序安装在 download 文件夹中 下载完成后 会出现一个对话框 要求我安装该应用程序 如何隐藏此对话框并在无需用户干预的情
  • POSIX 正则表达式不适用于 [:digit:] 字符类

    我在日志文件中有以下日志行access 20170118 14 log 127 0 0 1 18 Jan 2017 14 22 16 0000 GET fam shared generate test devicelist php HTTP
  • Delphi:为什么断点有时不可用(IDE 上的绿色突出显示线)?

    有时我会失去 Delphi 中的断点功能 我认为这是 Delphi 2009 的问题 但现在我在 Delphi XE 中也有它 在 Delphi 2009 中 通过删除 dproj 文件 我使断点再次起作用 在 Delphi XE 中 我无
  • 不允许销毁资产以避免数据丢失

    我的RemoveTail 函数执行以下代码时遇到了麻烦 destroy gameObject 这个蛇游戏创建了我的蛇预制件的克隆 我通过分配 尾巴 来控制蛇的长度 并在达到 maxSize 时删除 尾巴 游戏对象 我知道我的错误是由于游戏删
  • ImageMagick 将 jpg 图像转换为 gif 速度慢

    我正在使用Magick IM 7 0 3平台 CentOS Linux版本7 0 将图像转换为gif 我从文件创建 Image 对象 问题是当我将 9 个 png 文件 每个 50kb 转换为 gif 时 只需要 50ms 但当变成9个jp
  • 类别重叠分析

    我正在尝试执行一些类别重叠分析并需要帮助 我有由客户服务票组成的数据 门票上标有类别数据 票证可以包含多个类别标签 我有一个提取票证 ID 和类别的查询 我得到多行包含多个类别的 ID 我正在寻找一种显示类别重叠的方法 例如 有多少票有类别
  • 获取当前地址位置的最佳方式 Kotlin 2023

    我想创建一个当前位置按钮来获取用户的当前地址 目前我正在使用fusedLocationClient lastLocation但它很慢 有时甚至不起作用 2023 年是否有更好且更新的方法使用 Kotlin 从用户处获取当前地址 祝你今天过得
  • 是否可以将可滚动的 TextView 添加到 ListView 中?

    我有一个 ListView 其中每行都有固定的高度 每行在一些图像旁边都包含一个 TextView 有时 我想要显示的文本太大 因此我想使其可滚动 所以我添加了 基于使 TextView 在 Android 上可滚动 将以下行添加到我的 T
  • 如何从 Promise 中提取数据

    我有一个返回数据的承诺 我想将其保存在变量中 由于异步性质 这在 JavaScript 中是不可能的吗 我需要使用吗onResolve作为回调 我可以以某种方式使用它 例如用 async await 包装它 const foo bar Pr
  • 多层评论回复:显示和存储

    因此 我正在尝试创建一个评论系统 您可以在其中回复已经回复的评论 允许您创建理论上无限的回复线程 我希望它们按时间顺序显示 最新的在顶部 但回复当然应该直接位于原始评论的下方 如果有多个评论回复同一条评论 回复也应按时间顺序排列 仍在原始评
  • AngularUI 日期选择器允许输入超出范围的值

    我遇到一个问题 我使用 AngularUI 指定具有一些允许的输入值范围的日期选择器 例如 用户可以选择从2013年6月10日到2013年6月20日的日期 只要用户在日期选择器内单击 这种方法就可以正常工作 但当用户键入范围之外的日期时 这
  • 如何在 C++ 中初始化“静态常量”数据成员?

    是否可以初始化一个static const构造函数之外的数据成员 它可以在声明数据成员的同一位置进行初始化吗 class A private static const int a 4 是的 你可以 但仅限于 int 类型 如果您希望静态成员
  • Oracle加载java JSch

    我想知道是否使用loadjava加载名为的 Java 包JSch jar在 Oracle 数据库中 然后加载另一个 java 文件 该文件利用 JSch 包通过 SSH 连接 将能够通过函数或过程在 Oracle 数据库中执行 我在尝试之前
  • 通过 require("http") 请求将图像作为二进制发送到远程服务器

    我正在尝试从 Node js 服务器将图像发送到远程服务器 这是到目前为止的请求格式 Note 就像邮递员中的二进制请求并选择文件并发送一样 function upload options body body body return new
  • 可以传递给 SQL*Plus 的命令行参数的最大长度?

    我从 Linux C Shell 调用 SQL Plus sqlplus username password file sql var1 var2 var3 如果我将字符串传递为var1 这个字符串可以有多长 它受操作系统控制吗 在这种情况
  • < > 在类接口中代表什么意思?

    我确信我在某处读过这篇文章 谁能告诉我以下界面中的 代表什么 interface GameFinder NSObject
  • “|”是什么for 在 Haskell 类定义中?

    我无法弄清楚 m gt w 部分在这样的类定义中意味着什么 class Monoid w Monad m gt MonadWriter w m m gt w 这会向类定义添加哪些附加信息 竖线是语法分隔符 本身没有任何意义 用于引入函数依赖