【发布时间】:2012-12-21 00:15:12
【问题描述】:
这是a question I asked almost two years ago 的后续。我仍在尝试使用类型系统编写一个小型线性代数库,其中使用类型系统(使用 Peano 编号)对向量/矩阵/张量的维度进行编码。这允许编译器将二进制操作限制为对应维度的对象。
效果很好,但我必须手动指定每个维度类型。例如(使用shapeless natural numbers):
type _1 = Succ[Nat._0]
type _2 = Succ[_1]
type _3 = Succ[_2]
对于小尺寸来说没关系,但如果我需要定义尺寸_1024,它会变得很无聊。我正在尝试(没有成功)找到一种将(在编译时)整数文字转换为相应 Peano 数字类型的方法。
在Daniel Sobral answer cmets 中,有人告诉我这是不可能的,因为 Scala 不支持依赖类型。现在,Scala 2.10 既有依赖类型又有宏。那么有没有办法实现呢?
【问题讨论】:
-
由于 2.10 只支持 def 宏,我想你应该看看宏天堂里的类型宏:docs.scala-lang.org/overviews/macros/paradise.html
-
Scala 支持依赖类型?我能介绍一下这方面的背景吗?
-
@Bill 看看宏示例。宏结果类型是依赖类型。
-
呵呵,我从来没有这么想过。这很酷。谢谢,@paradigmatic。
标签: scala type-level-computation peano-numbers