泛型和约束多态性与子类型

2024-01-06

In this PDF 演示文稿 http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-retrospective/ECOOP-July09.pdf关于 Haskell 类型类,幻灯片 #54 有这个问题:

开放式问题:

在具有泛型的语言中 约束多态性,你需要吗 也有子类型吗?

我的问题是:

  1. 泛型和约束多态性如何使子类型变得不必要?

  2. 如果泛型和约束多态性使得子类型变得不必要,那么为什么 Scala 有子类型呢?


泛型和约束多态性如何使子类型变得不必要?

目前尚不清楚他们是否这样做。如果你把这张幻灯片放在上下文中,我认为演讲者试图提出的论点是这样的:

  • 在过去,子类型提供了一种重要的多态性。

  • 同样在过去,在另一个国家,类型抽象和类型参数提供了一种重要的多态性。这种在其祖国被称为参数多态性,但在国外它被称为generics.

  • 现代泛型承认约束,有时称为“有界多态性”,它可以实现许多与子类型多态性相同的功能。

  • 子类型带来了很大的负担——特别是,您必须担心协变和逆变。语言最终会带来令人不舒服的限制、重量级符号,有时甚至是彻底的安全违规(例如 Eiffel)。

悬而未决的问题:也许受到限制参数多态性解决了足够多的相同问题,在美好的未来,我们可以完全摆脱子类型多态性,以及子类型何时是协变、逆变和不变的令人讨厌的问题。

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

泛型和约束多态性与子类型 的相关文章

  • 如何将模型结果保存到文本文件?

    我正在尝试将从模型生成的频繁项集保存到文本文件中 该代码是 Spark ML 库中 FPGrowth 示例的示例 Using saveAsTextFile直接在模型上写入 RDD 位置而不是实际值 import org apache spa
  • Haskell:是的,没有类型类。为什么是整数?

    我有一个关于 GHCi 如何假定整数类型的问题 我正在阅读 Learn you a Haskell 是 否类型的课程 如果您想阅读全文 这里有一个链接 http learnyouahaskell com making our own typ
  • Scala 的代码覆盖率工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 num 的签名键入 double?

    我才刚刚开始为你学习 Haskell 以获得伟大的好处 并且我在类型类方面遇到了一些麻烦 我想创建一个接受任何数字类型并强制其为双精度的函数 我的第一个想法是定义 numToDouble Num gt Double 但我认为这不起作用 因为
  • HashPartitioner 是如何工作的?

    我阅读了文档HashPartitioner http spark apache org docs 1 3 1 api java index html org apache spark HashPartitioner html 不幸的是 除了
  • 更改 build.sbt 自定义任务中的版本

    我在 build sbt 中定义了一个自定义任务 val doSmth taskKey Unit smth doSmth version 1 0 SNAPSHOT 但它不会改变版本 我真正想要的是自定义 sbt 发布任务 它将始终将相同的版
  • 模拟 BlazeClientBuilder[IO] 以返回模拟客户端[IO]

    我正在使用BlazeClientBuilder IO resource方法得到Client IO 现在 我想模拟客户端进行单元测试 但不知道该怎么做 有没有一个好的方法来嘲笑这个 我会怎么做 class ExternalCall val r
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten
  • 高效序列化案例类

    对于我正在工作的图书馆 我需要提供一个高效 便捷 typesafe序列化 scala 类的方法 理想的情况是用户可以创建一个案例类 并且只要所有成员都是可序列化的 它似乎也应该如此 我准确地知道序列化和反序列化阶段的类型 因此不需要 也不能
  • 对两种类型之间的二元关系进行建模

    有企业 也有人 用户可以对某个企业点赞或发表评论 但效果是一样的can not发生在一个人身上 当用户发布有关某个企业的内容或对其点赞时 该企业就被称为target喜欢或帖子 trait TargetingRelation Targetin
  • 使用 net.liftweb.json 或 scala.util.parsing.json 解析大型 (30MB) JSON 文件会出现 OutOfMemoryException。有什么建议吗?

    我有一个包含大量测试数据的 JSON 文件 我想解析这些数据并推送我正在测试的算法 它的大小约为 30MB 包含大约 60 000 个元素的列表 我最初在 scala util parsing json 中尝试了简单的解析器 如下所示 im
  • Scala:什么是 CompactBuffer?

    我试图弄清楚 CompactBuffer 的含义 和迭代器一样吗 请解释其中的差异 根据 Spark 的文档 它是 ArrayBuffer 的替代方案 可以提供更好的性能 因为它分配的内存更少 以下是 CompactBuffer 类文档的摘
  • 使用 Scala 获取 Spark 数据集中最新时间戳对应的行

    我对 Spark 和 Scala 比较陌生 我有一个具有以下格式的数据框 Col1 Col2 Col3 Col 4 Col 5 Col TS Col 7 1234 AAAA 1111 afsdf ewqre 1970 01 01 00 00
  • 如何为抽象工厂创建的类设置特定属性?

    是否可以让具体工厂使用抽象工厂模式为其创建具有特定类型参数的具体类 或者由各自的具体工厂创建的不同具体类是否需要具有相同的字段 例如 在下图中 您将如何使用客户端 应用程序 给出的不同参数集来实例化 WinButton 和 OSXButto
  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • Vim 脚本中的“reduce”函数

    Vim 脚本有一些非常基本的函数式编程工具 It has map and filter 但据我所知它缺乏reduce 功能 Reduce https en wikipedia org wiki Fold 28higher order fun
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何在 scala repl 和 sbt 控制台中关闭/打开 typer 阶段

    是否可以在不退出当前会话的情况下切换阶段 我尝试进入 power 模式 但它仍然不打印类型 在SBT中只需添加以下设置 set scalacOptions in Compile console Xprint typer 在 REPL 中你可
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 为什么自类型类可以声明类

    我知道 Scala 只能混合特征 这对于依赖注入和蛋糕模式是有意义的 我的问题是为什么我仍然可以声明一个需要另一个 类 但不需要特征的类 Code class C class D self C gt 这仍然编译成功 我认为它应该编译失败 因

随机推荐

  • jQuery - 拖动时停止悬停事件

    我正在创建一个拖放图像环境 如果您将鼠标悬停在图像上 则会在其上方弹出一个小菜单 如果单击并拖动图像 可以对它们重新排序 我遇到的问题是 我希望在拖动时禁用悬停事件 目前 如果您拖动图像 它会触发您悬停在其上的其他图像上的所有悬停菜单 ul
  • 在休眠应用程序中设置字节码提供程序的问题

    我正在尝试添加 cglib 作为默认字节代码提供程序 我在用hibernate cfg xml文件来配置会话工厂
  • 应用程序在 Activity 中抛出 java.lang.StackOverflowError 异常

    我正在开发一款 Android 应用程序 在我的一项活动中 我使用 PullToRefreshListView 有时我得到java lang StackOverflowError 错误我的活动例外 我尝试修复它 我也在谷歌上搜索 但没有得到
  • 我如何发现我的delphi应用程序当前是否有模式窗口?

    我在 Delphi MDI 应用程序中运行了一个计时器 如果后台发生变化 我想用它弹出一条消息 但我不希望当应用程序在前台有模式对话框时弹出该消息 因为用户对此无能为力 那么我想知道如何检查我的应用程序中是否存在模式对话框 您可以尝试使用以
  • 如何克隆文件名中带有冒号的文件

    当我使用 msysgit 克隆存储库时 所有文件名中带有空格的文件都不会被删除 然后在状态中显示为已删除 文件名看起来像这样 styles ie 1 12 11 6 02 PM css所以它实际上可能是冒号或括号 如何获取这些文件以使我的本
  • Reactjs 淡入淡出 div 与内联样式

    我怎样才能添加一个fade in动画到 div fading in text div 仅使用内联样式 class Practise extends Component state show false componentDidMount s
  • 在张量流中解包(unstack)具有一个 None 维度的输入(占位符)

    我正在尝试将 LSTM 与具有不同时间步长 不同帧数 的输入一起使用 rnn static rnn 的输入应该是 tf 序列 不是 tf 所以 我应该将我的输入转换为序列 我尝试使用 tf unstack 和 tf split 但它们都需要
  • cocoapods activesupport冲突ios开发

    我尝试在 cocoapods 项目上报告此问题 但被指示在此处发布 我最近承担了一个工作项目 但我无法让以前的顾问设置在我的本地工作站上运行 然而 当我运行时 我能够成功安装 cocoapods gempod install它爆炸了 spe
  • Django modelform:是否可以内联添加相关模型?

    我真的希望这不是重复的 我找不到任何东西 但这可能意味着我不擅长搜索 我有一个 Django 应用程序 并且工作人员已经在使用管理应用程序来 嗯 管理目的 我还为特定模型创建了一个快速数据输入页面 基本上是通过在基本模板中放置模型表单来创建
  • 为什么“git describe”在我的干净 git 存储库副本上显示较旧的标签版本?

    一些背景 我目前有两个本地 git 存储库 它们指向相同的源 主项目 我有两个 git 存储库的原因是 我有一个干净的主副本 我可以在需要时使用 还有一个副本 我可以在沙箱中应用更改 提交等 这可能有点矫枉过正 但有一些优点对我个人来说 有
  • 模型更改时角度视图(DOM 元素)不会更新

    在最新稳定的 Chrome 中运行最新稳定版本的 Angular 我对位于 ng 控制器 A 的视图内的 DOM 元素进行了 ng click 但 DOM 元素本身的 ng controller 设置为another控制器 B ng cli
  • F# 记录的字段声明为私有时出现奇怪的可访问范围

    我刚刚注意到 当 F 记录的字段部分被声明为私有时 出现了相当违反直觉的行为 这与是否可以将记录的字段设为私有 或者将记录成员设置为私有 https stackoverflow com questions 12389308 is it po
  • iPhone 在 API 调用后重新启动

    我面临一个非常奇怪的问题 我的 iPhone 正在重新启动 此问题仅在特定场景下发生 第 1 步 我有一个同步过程 其中加载整个应用程序的数据 所以我基本上通过上传 4 5 个相机捕获的图像并同步应用程序数据来进行大量的 API 调用 第
  • Netbeans 7.4 for PHP 上的“不要直接访问超级全局 $_SERVER 数组”

    是的 类似的问题已发布并正确回答 Netbeans 7 4 for PHP 上警告 不要直接访问超全局 POST 数组 https stackoverflow com questions 19767894 warning do not ac
  • div外框

    我有一个关于 div 和框架的问题 当框架内有下拉列表时 按下下拉列表时 下拉列表将显示在框架外部 我有一个替代下拉列表 它几乎具有相同的属性 但我必须将元素彼此相邻显示 因此元素显示在 div 中 我的问题 有没有办法 当您按下替代下拉菜
  • 对颜色进行排序 (Objective-C)

    我正在做这样的事情 NSArray colors float divisor 3333 NSMutableArray retVal NSMutableArray array for float one 0 one lt 1 0f one d
  • 通过 Loader.loadBytes(byteArray) 加载图像

    我想问一件事 如果我创建 Loader 并通过 URL 请求加载外部图像 将会得到结果 loader content is Bitmap loader content bitmapData is BitmapData 但如果我使用 Load
  • 裸存储库中的 git ls-files

    我想访问一个裸git存储库 并且我想列出存储库中的所有文件 在普通的 git 存储库上 我可以通过运行轻松地做到这一点git ls files 输出示例 git ls files README md file1 js file2 js fi
  • 从本地计算机访问 GCP Memorystore

    在开发过程中从本地计算机访问 Memorystore 的最佳方式是什么 是否有类似 Cloud SQL Proxy 之类的东西可以用来设置隧道 您可以启动 Compute Engine 实例并使用端口转发连接到您的 Redis 计算机 例如
  • 泛型和约束多态性与子类型

    In this PDF 演示文稿 http research microsoft com en us um people simonpj papers haskell retrospective ECOOP July09 pdf关于 Has