有路径相关类型,我认为在Scala中可以表达Epigram或Agda等语言的几乎所有特性,但是我想知道为什么Scala没有像在其他领域(比如DSLs)那样更明确地支持路径相关类型? 是否有我忽略的原因,例如“这不是必要的”?
Scala语言规范规定了存在类型的语法,具体可以参考这里。 Type ::= InfixType ExistentialClauses ExistentialClauses ::= ‘forSome’ ‘{’ ExistentialDcl ...
我一直在研究路径依赖类型。我找到的最好描述是: 如果L是一个类型标签,那么当且仅当可以显示x和y引用相同对象时,x.L和y.L是相同的类型。 有时这并不是人们所期望的子类型行为。我本来以为如果上面的例子中L确实是相同的,那么这就足以使x.L和y.L相同。 Scala为什么会设计成...
我想将一个对象传递给一个接受具有投影类型参数的函数,并让Scala推断出对象的类型来自包含它的对象。这里是一些简单的代码来说明难点:trait Cult { cult_ => case class CultLeader(personality: Personality) { ...
背景 假设我有一些嵌套的特质: trait Foo { trait Bar } 以下是一些实例: val myFoo = new Foo {} val myBar = new myFoo.Bar {} 我可以写出以下代码,这些代码看起来(至少乍一看)应该做大致相同的事情: de...
当我使用Scala的依赖方法类型时,我遇到了默认方法参数的冲突:abstract class X { type Y case class YY(y: Y) } object XX extends X { type Y = String } trait SomeTrait { ...
路径相关类型很有用:trait Sys { type Global } def foo[S <: Sys](system: S)(global: system.Global) = () 为什么这对构造函数不起作用?class Foo[S <: Sys](val system: ...
Scala具有路径相关类型,但据说Scala不支持依赖类型。路径相关类型和依赖类型有什么区别? 据我了解,路径相关类型是依赖类型的一种。
我目前正在尝试在Scala中定义一个基于时钟的数据流语言模型。 一个数据流代表了某种类型T的无限数列,由一些时钟C控制(时钟表示数据流实际可用的时刻)。 可以通过根据另一个(布尔)数据流F'派生出的时钟C对数据流F进行采样来得到采样数据流SF:当布尔数据流F'为真时,SF包含了从F采样得到...