【发布时间】:2014-02-13 06:55:13
【问题描述】:
在 shapeless 中,Nat 类型代表了一种在类型级别对自然数进行编码的方法。例如,这用于固定大小的列表。您甚至可以在类型级别上进行计算,例如将N 元素列表追加到K 元素列表,并返回一个在编译时已知具有N+K 元素的列表。
这种表示是否能够表示大数,例如1000000 或 253,还是会导致 Scala 编译器放弃?
【问题讨论】:
-
Miles 去年的 NE Scala presentation 解决了这个问题,简短的回答是,可以使用 singleton types 在 Scala 或至少在 2.10 中的类型级别表示大数,但它might not be worth it。 Shapeless 2.0 目前仍在使用 Church 编码,这将使您在编译器放弃之前达到 1,000 左右。
-
我将在今天晚些时候尝试写一个带有更多上下文的答案。附带说明一下,如果您需要更大的类型级别数字,使用整数单例类型并不难——例如,请参阅我的博客文章 here 或 singleton functionality in Shapeless。
-
如果您想对大型类型级别的数字进行算术运算,您可以考虑将它们实现为位的链表。
-
@KarolS 我已经实施了该策略!如果有人感兴趣,我很乐意将它贡献给 shapeless,尽管它毫无价值,除非有人可以帮助解决 stackoverflow.com/questions/31768203/…
-
看来stackoverflow.com/questions/31768203/… 已经解决了,你能贡献你的代码并用你自己的答案结束问题吗?
标签: scala numbers compiler-optimization shapeless