为什么 `deleteBy` 没有最通用的类​​型有充分的理由吗?

2024-01-03

Haskell 2010 语言报告在第 20.10.1.1 节中指出:

deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]

事实上,实施中GHC 库 http://www.haskell.org/ghc/docs/latest/html/libraries/base/src/Data-List.html#delete会允许

deleteBy :: (b -> a -> Bool) -> b -> [a] -> [a]

但实际上通过注释将类型限制为前一种。

因此,我们不能说:

foo = deleteBy fsteq 42 [(43, "foo"), (44, "bar"), (42, "baz")] where
    fsteq a (b,_) = a == b

because Int不等于(Int, String).

这有什么好的理由吗?

我问的原因是,如果没有充分的理由,我会包括deleteBy与更一般的类型Frege http://code.google.com/p/frege我目前正在做的 Data.List 端口。但也许我忽略了一些东西?

编辑:正如@hammar 指出的,这适用于其他xxx由功也。


概括类型deleteBy以一种非常实际的方式违反了标准:由于未解决的重载,完全有效的 Haskell 程序变得无效。

这是一个演示:

class (Num a) => Magic a where
  magic :: a -> Bool

sameMagic :: (Magic a, Magic b) => a -> b -> Bool
sameMagic a b = magic a == magic b

test :: (Magic a) => [a]
test = deleteBy sameMagic 42 [1234]

在 Haskell 中,这个程序的类型完美;deleteBy的限制类型确保42保证具有相同的类型1234。随着广义deleteBy,情况并非如此,因此类型42是不明确的,使程序无效。 (如果您想要一个不那么做作的示例,请考虑一个比较两个的函数Integral价值观与toInteger.)

因此,也许这种限制类型没有充分的理由(尽管如果deleteBy是要概括的,我更喜欢哈马尔的版本而不是你的建议),但概括它does违反标准,它可能会破坏有效的程序。

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

为什么 `deleteBy` 没有最通用的类​​型有充分的理由吗? 的相关文章

  • 模式匹配需要圆括号来表示非空列表而不是方括号

    在 Haskell 中 为什么模式匹配期望列表在不为空时有圆括号而不是方括号 当它尝试与空列表 方括号 进行模式匹配时 为什么它不遵循相同的约定 圆括号不应该专门为元组保留吗 例如 下面不起作用 third Integral a gt a
  • 在帖子上生成最近帖子列表时,如何避免依赖循环?

    所以这有效 create archive html do route idRoute compile do posts lt myRecentFirst gitTimes lt lt loadAll posts let archiveCtx
  • 结构上强制的自由替代,没有左派分配性

    有一个不错的免费替代品 http hackage haskell org package free 4 12 4 docs Control Alternative Free html在伟大的free包 它将函子提升到左分配替代方案 也就是说
  • 绑定变量时 Haskell 中的无限循环

    下面的 Haskell 代码不会终止 有人可以解释一下为什么吗 谢谢 f let x 10 in let x x x in x 我认为解释器首先绑定 x 10 然后将 x x 计算为 100 并绑定 x 100 环境变为 x 100 那么整
  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 为什么 GeneralizedNewtypeDeriving 没有安全的 Haskell?

    来自 GHC 手册 第安全语言 http www haskell org ghc docs 7 6 2 html users guide safe haskell html safe language 模块边界控制 使用安全语言编译的 Ha
  • 可以通过Data.Function.fix来表达变形吗?

    我有这个可爱的fixana这里的函数执行速度比她的姐妹快 5 倍左右ana 我有一个criterion报告支持我这一点 ana alg Fix fmap ana alg alg fixana alg fix f gt Fix fmap f
  • 为什么haskell中的递归列表这么慢?

    我对 Haskell 很陌生 我在 Haskell 中定义了一个函数 febs Integral a gt a gt a febs n n lt 0 0 n 1 1 n 2 1 otherwise febs n 1 febs n 2 但是
  • 如何找到仅是 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
  • 如何将只缓存某些内容的字段添加到ADT?

    我经常需要向 ADT 添加字段 仅记住一些冗余信息 但我还没有完全弄清楚如何又好又高效地做到这一点 说明问题的最好方法是举个例子 假设我们正在使用无类型 lambda 项 type VSym String data Lambda Var V
  • Haskell 中的相互递归求值器

    Update 我已经添加一个答案 https stackoverflow com questions 3524485 mutually recursive evaluator in haskell 4504200 4504200这描述了我的
  • 在 haskell 中处理 IO 与纯代码

    我正在编写一个shell脚本 我在haskell中的第一个非示例 它应该列出一个目录 获取每个文件大小 进行一些字符串操作 纯代码 然后重命名一些文件 我不确定我做错了什么 所以有两个问题 我应该如何安排这样的程序中的代码 我有一个具体问题
  • 如何组合过滤条件

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

    我想我理解 PHOAS 参数化高阶抽象语法 我明白了如何漂亮地打印一个表达式 参见http www reddit com r haskell comments 1mo59h phoas for free by edward kmett cc
  • 什么是阴谋地狱?

    在阅读有关 阴谋地狱 的内容时 我有点困惑 因为这个词的含义太多了 我猜最初 Cabal Hell 指的是钻石依赖问题 该问题是通过限制构建计划在每个构建计划中只有任何包的单个版本来解决的 一个包的两个不同版本不能存在于单个构建计划中 正如
  • 管道中缺少 ResourceT 实例

    我在尝试使用时遇到奇怪的错误ResourceT http hackage haskell org package conduit 1 0 9 1 docs Data Conduit html t 3aResourceT来自管道 1 0 9
  • Haskell 和 Idris 之间的区别:类型宇宙中运行时/编译时的反映

    因此 在 Idris 中 编写以下内容是完全有效的 item b Bool gt if b then Nat else List Nat item True 42 item False 1 2 3 cf https www youtube
  • Haskell 排列库函数 - 请澄清一下?

    这是代码permutationsHaskell 中的函数Data List module permutations a gt a permutations xs0 xs0 perms xs0 where perms perms t ts i
  • 简单的秒差距示例会产生类型错误

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

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

随机推荐

  • 解释自加入

    我试图在网上了解自学 但找不到满意的解释 任何人都可以用一个例子来解释它 比如在哪里使用它以及为什么使用它 如果你能用查询来解释它就好了 维基百科的连接 SQL 页面有一个特定的关于自加入的条目 http en wikipedia org
  • 如何始终包含静态库中的符号?

    假设我有一个静态库 libx a 如何从这个库中制作一些符号 不是全部 always存在于我与我的库链接的任何二进制文件中吗 原因是我需要通过 dlopen dlsym 来使用这些符号 我知道 whole archive 链接器开关 但它强
  • 具有不同动态内容的小部件(Angular-Gridster)

    我正在尝试使用 Angular Gridster 模块创建基于 AngularJS 的 Web 仪表板 gridster 工作正常 我在将内容绑定到它时没有任何问题 例如使用 ng bind html 的文本或图像 但实际上我不想只向这些
  • 3D 绘图纵横比 [matplotlib]

    我正在使用编写的代码here https stackoverflow com a 15583431 4888158制作如下图所示的情节 问题是 我想调整纵横比 即沿 z 轴拉伸它 以便所有堆叠的图像或多或少可见 有没有一种简单的方法可以做到
  • 第二级 R 函数中的子集化

    功能foo1可以通过请求的变量对列表进行子集化 例如 by type 1 否则 foo1将简单地输出输入的列表本身 出于我的目的 我需要使用foo1在一个名为的新函数中foo2 在我下面的代码中 我想要的输出是这样获得的 foo2 data
  • 从 C++ 中带引号的 CSV/文本文件读取

    我有一个从文本文件 CSV 中读取行的工作函数 但我需要修改它以便能够读取双引号 我需要这些双引号 因为我的一些字符串值包含逗号 所以我使用双引号表示读取函数应忽略双引号之间的逗号 是否有一种相对简单的方法来修改下面的函数以适应某些字段将用
  • Javascript 在开发模式下通过资源管道进行缓存

    我最近将我的应用程序升级到了 Rails 3 1 通常一切似乎都正常 但有一件事让我发疯 我有 2 个主要的 js 文件 我们称它们为 application js 和 main js application js 中有我的清单内容 并且正
  • 尝试使用 Code::Blocks 编译第二个模块时出现 C++ 链接器错误

    所以我正在尝试学习 C 并且我已经尽可能使用头文件了 它们对我来说真的毫无意义 我已经尝试了多种组合 但到目前为止没有任何效果 主要 cpp include test h int main testClass Player1 return
  • lxml 解析时删除 标签?

    我目前正在解析 XML 文档 添加元素 添加属性等 因此 我首先需要在处理 XML 之前对其进行解析 然而 lxml似乎正在删除该元素
  • 使用 JavaScript 下载 Google Drive 文件

    当我单击 Google Drive 选择器但无法下载文件时 我想使用 javascript 将 Google Drive 文件下载到我的服务器 我已经搜索了 4 天 但问题与我正在使用的代码相同 function pickerCallbac
  • 在 python 中隐藏或删除 tkinter 的菜单栏

    我可以按照以下说明设置菜单 my tk config menu my menu bar 但是 如何删除或完全隐藏它 my tk config menu None 不起作用 仅供参考 我知道这个问题很旧并且有一个可接受的答案 但这对我在 tk
  • Swing I18N:何时加载属性?

    我正在重构现有的 Java 桌面应用程序 以从 properties 文件加载国际化的 UI 文本标签 在应用程序生命周期中 什么时候是加载属性文件并将字符串填充到内存中的适当时间 现有的实现将每个组件的标签定义为例如 public sta
  • 会员无法使用好友功能

    我收到一个无法解释的错误 这是我的头文件 include
  • python有像C/C++一样的头文件吗? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 python 是否需要像 C C 一样的头文件 包含头文件和导入包有什么区别 不 Python 没有头文件 也没有类似的文件 Java 也没
  • 淘汰赛“如果绑定”不起作用

    使用 Chrome 进行调试时 我可以看到 CoverPrices 有 9 个元素 foreach 循环实际上运行良好 并且表看起来正确 第一个跨度正确绑定到 Item1 但是 if 绑定不起作用并且两个图像都会显示 然而 Item2 中的
  • 在 Django 中重置 SQLite 数据库

    我正在尝试重构 Django 项目 我重命名了几个应用程序并添加了一个新应用程序 并调整了一些模型 我想清除我的数据库和迁移并重新开始 但我不确定如何实现这一点 这就是我所做的 rm r myapp migrations I ran thi
  • Angular 6 Auth0 - 全局未定义

    我已将我的应用程序从 Angular 5 升级到 Angular 6 我现在收到以下错误 Uncaught ReferenceError global is not defined at Object node modules auth0
  • 使用 beeline 时避免在列名中打印表名

    在直线中使用蜂巢时使用简单select查询我想返回表without列名中的表名作为默认值 Example Data 以一个简单的表格为例 教程点 https www tutorialspoint com hive hive create t
  • 使用 PowerShell 的 Stack Overflow 声誉

    如何使用 PowerShell 功能查看我的声誉 您可以使用以下功能 Function Get StackOverFlowReputation param userID client new object System Net WebCli
  • 为什么 `deleteBy` 没有最通用的类​​型有充分的理由吗?

    Haskell 2010 语言报告在第 20 10 1 1 节中指出 deleteBy a gt a gt Bool gt a gt a gt a 事实上 实施中GHC 库 http www haskell org ghc docs lat