问题标签 [path-dependent-type]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
13529 浏览

scala - Scala 的路径依赖类型是什么意思?

我听说 Scala 有路径依赖类型。这与内部类有关,但这实际上意味着什么,我为什么要关心?

0 投票
1 回答
420 浏览

scala - Scala中依赖路径的内部类型之间的关系

警告:我从#scala 交叉发布

《Scala 中的编程》一书指出,依赖于路径的类型根据所讨论路径的确切实例而有所不同。如果是这样,我不明白为什么以下所有谓词都返回 true:

0 投票
2 回答
501 浏览

scala - Scala抽象路径依赖类型问题

有谁知道这个编译器错误是怎么回事?如果我不扩展 INode,错误就会消失。

0 投票
4 回答
561 浏览

scala - Scala 抽象路径依赖类型问题第 2 部分

关于 scala 抽象类型的几个问题。

  1. 如果我想在构造函数值中使用类型,是否必须使用参数化 [] 类型?IE。是否可以有一个具有抽象构造函数参数类型的类?如果我摆脱 [T1,T2] 并使用 INode#TKey 和 INode#TValue 作为构造函数参数类型,我在做什么?我收到令人困惑的错误消息。
  2. 我如何在不求助于内部类型的情况下很好地解决这个问题?我在定义中使用 INode 似乎意味着我可以返回/接收具有不同类型的 TKey 和 TValue 的 INode。如何将其限制为与当前类型相同的 TKey/TValue 类型,而不限制自己返回/接收完全“this”实例?
0 投票
2 回答
1169 浏览

scala - 如何在 Scala 中模拟依赖类型

我正在尝试在 Scala 中定义一个通用的残留类环。残基类环由某个基环(例如整数)和模数(例如二)定义,该模数是来自基环的值。环及其元素都是对象,因此模数的类型通常是依赖类型,具体取决于基环。我知道这在 Scala 中是不允许的(有充分的理由),所以我试图通过近似类型并在构造残基类环时进行运行时检查来模拟它。

的定义ResidueClassRing被接受而没有错误,但是,Scala 不允许我实例化它,因为two我收到错误消息的参数

难道我做错了什么?这可能是 Scala 类型检查器中的错误吗?有没有更好的定义方式ResidueClassRing

这是用于 Helios 的 Eclipse IDE 中的 Scala 2.8.0。2.7.x 已经出现该问题。这是代码的简化版本:

0 投票
2 回答
591 浏览

scala - 如何在 Scala 中处理枚举和路径相关类型

我遇到了一个问题,其解决方案应该等同于解决方案:假设我想编写一个方法,给定一个枚举,返回其所有值的列表。我想写:

但编译失败并出现illegal dependent method type错误。可以改写这个吗?

0 投票
2 回答
977 浏览

reflection - 路径相关类型与“基础类型”,检查哪些?

当使用带有反射的路径相关类型时,即使我有匹配的“基础类型”,我也会收到类型不匹配错误。这些“非基础类型”是什么?为什么要检查它们而不是“基础类型”?

在下面的代码中,我希望该compare方法只接受 A 的相同类型的子类作为参数。错误在最后一行。

在最后一行我得到这个错误:

由于 b2 的类型与 b1 的类型(即 A)相同,因此我希望这不会产生错误。由于某种原因,这些依赖于路径的类型在使用反射时不同于“基础类型”。为什么?

如果我不使用反射,它会起作用:

(在我的情况下,我确实需要使用反射)。可以newInst()使用反射将对象作为“B”类返回吗?这会有帮助吗?使用抽象类型时是否有类型擦除?

这是我发现(在这个论坛上)关于相同错误的唯一参考,但它可能不相关。

0 投票
2 回答
361 浏览

scala - 通过将类型参数与参数的路径相关类型匹配来约束操作

我想利用 Scala 的类型系统来限制系统中的操作,其中存在对某些值的版本化引用。这一切都发生在一些附加Ctx了版本类型的事务上下文中。V现在有一个Factory创建参考变量。它们是通过附加的创建V1版本(类型参数)创建的,对应于调用工厂的上下文版本。

现在想象一些代码试图在更高版本中访问该引用,即使用不同的Ctx. 我想要实现的是禁止在与创建版本不匹配的Ref任何版本(CtxV类型字段)中调用访问权限,但允许您通过一些返回新的替换机制来解析引用Ref可以在当前版本中访问的视图。(如果substitute使用无效的上下文调用它是可以的,例如,一个比Ref's旧的上下文V1——在这种情况下,可能会引发运行时异常)

这是我的尝试:

问题是以整个编译的方式定义类方法access,即复合对象access应该编译,但同时我不能accessany Ctx调用这个类方法,只能用一个版本与引用版本匹配的方法。

最好没有结构类型或任何强加性能问题的东西。

0 投票
2 回答
311 浏览

scala - 路径依赖类型的方差技巧

这是隐式和路径相关类型的另一个。我不明白为什么我需要在这里如此冗长:(注意——我找到了答案,见下文)

第一次尝试:

第二次尝试:

第三次尝试:

0 投票
3 回答
384 浏览

scala - 驾驶单身人士穿过砖墙

这是一个非常精简的版本:

愚蠢的砖墙不让我通过。任何想法如何可能?秘密的斯卡拉隧道效应?希望...