基于原点的约束函数(路径依赖类型?类型生成?)

2024-01-12

抱歉,标题太糟糕了,不确定有更好的标题。这是我的问题的总体简化(抱歉,如果它看起来如此微不足道,那么它毫无意义):

class RList[T](data: List[T]) {
   def map[V](f: T=>V): RList[V] = ...
}

的想法RList(受限列表)的缺点是您无法调整其大小,或更改其中元素的顺序。但是您可以使用函数为您提供一个新的 RList,其中包含更改的数据。

现在需要一个创建 RList 的函数。它可能有签名某物 like:

def toRList[T](values: List[T]): RList[T] = ...

到目前为止,一切都很好。但现在是棘手的部分。我需要一个有效的功能like this:

def zip[T, V](left: RList[T], right: RList[V]): RList[(T,V)]

但还有一个额外的限制left and right具有相同的起源。因此,保证它们的大小相同。

例如应该编译的代码:

val x = toRList(List(1, 2, 3))
val y = x.map(_ * 2)
val z = y.map(_.toString)
zip(y,z)

例如应该失败的代码编译

val y = toRList(List(2, 4, 6))
val z = toRList(List("one", "two"))
zip(y,z)

*注意:在我最初的问题中,对 zip 的约束必须是它们来自同一“源”。仅仅保证它们的长度相同是不够的(更不用说,列表的大小在编译时未知)*

我还需要能够使用zip多次,所以这样的东西应该编译

zip(a,zip(b,c))

(假设a, b and c均来自同一来源)

Thanks!


制作的缺点之一RList生产者的一个内在特征是用以下方式编写方法或函数变得不太令人愉快RList生产者外部的争论——你最终会得到很多这样的结果:

def foo[P <: RListProducer, T](rl: P#RList[T]) = ???

另一种选择是给予RList对于每个“源”来说都是唯一的类型成员RList,但每个来源都会传递给它的“孩子”。像这样的东西:

trait RList[T] { outer =>
  type S
  protected val wrapped: List[T]

  def map[V](f: T => V) = new RList[V] {
    type S = outer.S
    protected val wrapped = outer.wrapped.map(f)
  }

  def zip[V](r: RList[V] { type S = outer.S }) = new RList[(T, V)] {
    type S = outer.S
    protected val wrapped = outer.wrapped.zip(r.wrapped)
  }
}

object RList {
  def toRList[T](ts: List[T]) = new RList[T] {
    type S = this.type
    protected val wrapped = ts
  }
}

现在假设我们有以下内容:

val a = RList.toRList(1 :: 2 :: 3 :: Nil)
val b = a.map(_.toString)
val c = RList.toRList("1" :: "2" :: "3" :: Nil)

Now a zip b (or a zip b zip a zip a等)将编译,但如果你抛出一个c你会得到一个编译器错误。


Note:我最初写的是zip如下:

def zip[V](r: RList[V])(implicit ev: r.S =:= S) = new RList[(T, V)] { ... }

这给出了一个稍微好一点的编译器错误消息,但如果您在 2.10 之前工作,则需要使用以下命令打开依赖方法类型-Ydependent-method-types.

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

基于原点的约束函数(路径依赖类型?类型生成?) 的相关文章

  • 为什么Scala语言中的++:运算符这么奇怪?

    我正在使用 运算符来获取两个集合的集合 但是我使用这两种方法得到的结果不一致 scala gt var r Array 1 2 r Array Int Array 1 2 scala gt r Array 3 scala gt r res2
  • 将 Scala 文件转换为 Dll

    我有一些使用 IntelliJ 和 SBT Plugin 编写的 scala 代码 并希望将代码作为 C 的 DLL 提供给我 我已经尝试使用 ikvmc 我通过 package 将所有类打包在一个罐子中 之后 我手动设置一个 jar 其中
  • Scala 2.10、Double.isNaN 和拳击

    在 Scala 2 10 中 是someDouble isNaN预计装箱 运行我的代码调用 isNaN通过反编译器 我仍然看到对double2Double在我的代码中 鉴于新的AnyVal在 2 10 中工作 我希望它不会比java lan
  • Either 相当于受检查的异常吗?

    从 Scala 开始并阅读有关Either我很自然地将新概念与我所知道的东西 在本例中来自 Java 进行比较 与之前有什么区别吗concept检查异常和Either 在这两种情况下 失败的可能性在方法中明确注释 throws或返回Eith
  • Scala 重载构造函数和 super

    我无法理解如何在 Java 上开发类似于以下的 Scala 代码 public abstract class A protected A protected A int a public abstract class B protected
  • 为什么我的 Project Euler Problem 12 算法这么慢?

    我已经在 Scala 中为 PE P12 创建了解决方案 但速度非常非常慢 有人可以告诉我为什么吗 如何优化这个 calculateDevisors 简单的方法和calculateNumberOfDivisors 除数函数具有相同的速度 i
  • Play框架2:如何在路由、视图和控制器之间传递对象?

    我正在尝试将书籍对象从视图传递到路线 然后将其发送到控制器中进行计算 我的代码如下 bookList scala html books java lang Iterable Book main BookList div class row
  • 《使用 Apache Flink 进行流处理》如何从 IntelliJ 运行书籍代码?

    如中所述这个帖子 https stackoverflow com questions 61043860 how to run first example of apache flink我无法成功运行 使用 Apache Flink 进行流处
  • scala.collection.breakOut 与视图

    这个答案 https stackoverflow com a 1716558 936869描述如何scala collection breakOut可用于防止创建浪费的中间集合 例如 这里我们创建一个中间体Seq String String
  • IntelliJ IDEA Scala 插件问题

    我对新的 Intellij IDEA 10 和 Scala 插件有疑问 当我在 Scala 源文件中输入任何内容时 编辑器会永久冻结 在其他文件 java 和其他 编辑器中效果很好 结构视图 scala 检查和显示成员功能已关闭 堆大小增加
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • 哪些 ORM 与 Scala 配合得很好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • Scala 相当于 Java 的 Number

    我正在尝试为数值域类型构建类型层次结构 例如AYear is an Int 这是一个Number a Percentage is a Double 这是一个Number等等 我需要层次结构以便我可以调用toInt or toDouble关于
  • 如何抑制spark输出控制台中的“Stage 2===>”?

    我有数据帧并试图获取不同的计数并且能够成功获取不同的计数 但是每当 scala 程序执行时我都会收到此消息 Stage 2 gt 1 1 2 我如何在控制台中抑制特定的此消息 val countID dataDF select substr
  • 使用原始类型模拟案例类

    考虑以下类型结构 trait HasId T def id T case class Entity id Long extends HasId Long 比方说 我们想在一些测试中模拟实体类 val entityMock mock Enti
  • 有没有办法捕获 Spark 中使用通配符读取的多个 parquet 文件的输入文件名?

    我使用 Spark 将多个 parquet 文件读取到单个 RDD 中 并使用标准通配符路径约定 换句话说 我正在做这样的事情 val myRdd spark read parquet s3 my bucket my folder parq
  • 使用 Spray-json 解析简单数组

    我正在尝试 但失败了 了解 Spray json 如何将 json feed 转换为对象 如果我有一个简单的 key gt value json feed 那么它似乎可以正常工作 但是我想要读取的数据出现在如下列表中 name John a
  • 为什么《Scala 中的函数式编程》一书的“无异常处理错误”一章中没有提到“scala.util.Try”?

    在 Scala 中的函数式编程 一书中的 无异常处理错误 一章中 作者给出 从函数体抛出异常的问题 Use Option如果我们不关心实际的异常 Use Either如果我们关心实际的异常 But scala util Try没有提到 从我
  • 类型级编程有哪些示例? [关闭]

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

随机推荐

  • 如何在 Emacs 中输入希腊字符

    This http xahlee info emacs emacs emacs n unicode htmlpage 表明希腊字母可以通过使用插入到 Emacs 中M i 然而 Debian Squeeze 变体中的 Emacs 23 2
  • 如何将BottomAppBar + FAB与BottomNavigationView结合起来

    我想使用FloatingActionButton 以及它锚定在 BottomNavigationView 顶部的 BottomAppBar 上时的行为 我想出了一个相当 hacky 的技巧来放置BottomNavigationView在 B
  • 如何证明这个大o符号的说法?

    如何证明这一点 4n O 8n 8n O 4n 那么有哪些C and n0两种情况的值 EDIT 我试图澄清我更多 1 For a proof see formal definition of Big O http en wikipedia
  • 分布式tensorflow在运行server.__init__后独占GPU

    我有两台计算机 每台计算机都有两个 GPU 我试图从分布式张量流开始 但对它是如何工作的感到非常困惑 在计算机 A 上我想要一个ps任务 我的印象是这应该在CPU上进行 和两个worker任务 每个 GPU 一个 我想在计算机 B 上有两个
  • angularjs在控制器之间共享数据配置

    我想知道共享指令的好方法是什么 控制器之间 我有两个指令可以在不同的控制器中使用 我首先想到的是不同的配置 使用类似 html div class container div div div js controller MainCtrl f
  • 如何加载检查点文件并使用略有不同的图形结构继续训练

    当我训练图表时 我发现我忘记在图表中添加 dropout 但我已经训练了很长时间并得到了一些检查点 那么我是否可以加载检查点并添加 dropout 然后继续训练 我的代码现在是这样的 create a graph vgg fcn fcn8
  • Selenium 和 Angularjs 等待执行一些操作

    我正在使用 selenium 来测试 AngularJS 应用程序 我面临的问题是 在页面完全加载之前 我无法在页面上执行任何操作 我可以放置 Thread sleep 但据我所知 这不是一个好的解决方案 有很多方法可以等待页面加载 我用谷
  • Spring @ConditionalOnProperty 注释未按预期工作

    我在属性文件中定义了一个属性 property true 然后我有SomeClass java类 其中should创建属性配置 beanonly如果财产property设置为 true 这是我的SomeClass class public
  • fork() 和输出

    我有一个简单的程序 int main std cout lt lt Hello World fork 程序执行后我的输出是 Hello World Hello World 为什么会发生这种情况而不是单一的Hello world 我猜测子进程
  • Git - 多个用户使用相同的工作目录:.git 元文件中的权限问题

    问题 当多个用户有权访问同一工作目录时 元数据中可能会出现权限问题 如果有 git执行操作 免责声明 在你责备我之前 我意识到共享工作目录与 Git 所代表的含义背道而驰 而且我不是在谈论在此共享目录中执行除只读操作之外的任何操作 我们在自
  • 序列化和封送处理有什么区别?

    我知道就几种分布式技术 例如 RPC 而言 使用了术语 编组 但不明白它与序列化有何不同 它们不是都将对象转换为一系列位吗 Related 什么是序列化 https stackoverflow com questions 633402 wh
  • 为什么 openssl_verify() 无法验证我的 JWT 令牌签名?

    代码 token request gt getQueryParams jwt access token token access token separator list header payload signature explode s
  • Jersey 和 Jackson 子类的序列化不包含额外的属性

    在 Jersey 中 当使用 Jackson 进行 JSON 序列化时 不包括实现子类的额外属性 例如 给定以下类结构 JsonTypeInfo use JsonTypeInfo Id NAME include JsonTypeInfo A
  • Message":"处理请求时出错。","StackTrace":"","ExceptionType" - JQUERY

    这是我的代码 我不断收到相同的错误响应 Message There was an error processing the request StackTrace ExceptionType 我想不通 我正在使用 Eloqua API 来获取
  • 如何连接2个表

    我有 2 张桌子 票证消息消息 ID 整数 创建日期 响应消息res id int 创建日期 我如何合并这两个表 以便它们按创建顺序排列 msg id 已创建resp id已创建 我不认为合并意味着加入 连接意味着您根据某些连接条件将每个表
  • 如何在 SailsJS 应用程序中使用多种布局?

    我的 Sails js 应用程序有单独的frontend and admin布局 我的视图引擎是ejs 如何为前端和管理站点使用单独的布局 我可以为每个操作使用特定的布局吗 From Sails js 文档 http sailsjs org
  • 为 newtype 创建 MonadBaseControl 实例

    假设我有简单的新类型声明 newtype Foo a Foo unFoo ReaderT Int IO a 我想创建 MonadBaseControl IO 的 Foo 实例 这应该很容易 因为 ReaderT Int IO 已经是 Mon
  • Django 用户的默认外键值

    我已通读过http www b list org weblog 2006 jun 06 django tips extending user model http www b list org weblog 2006 jun 06 djan
  • 新 User.employeeId ExtensionProperty 不起作用

    最近我们的租户出现了一个新的employeeId归因于user entity 我们拥有超过 40 000 个用户帐户 其中一些创建为纯 Azure AD 用户 其他创建为邮件用户 通过 Exchange Online 对于许多帐户 尝试PO
  • 基于原点的约束函数(路径依赖类型?类型生成?)

    抱歉 标题太糟糕了 不确定有更好的标题 这是我的问题的总体简化 抱歉 如果它看起来如此微不足道 那么它毫无意义 class RList T data List T def map V f T gt V RList V 的想法RList 受限