在无形状中,Nat类型表示一种在类型级别编码自然数的方法。例如,这用于固定大小的列表。您甚至可以在类型级别上进行计算,例如,将N
元素列表追加到元素列表中,K
并获取在编译时已知具有N+K
元素的列表。
这种表示是否能够表示较大的数字(例如1000000
2 53),还是会导致Scala编译器放弃?
21
Miles 去年在NE Scala的演示中解决了这个问题,简短的回答是,可以使用Singleton类型在Scala(或至少在2.10中)以类型级别表示大量数字,但这可能不值得。目前,Shapeless 2.0仍使用Church编码,在放弃编译器之前,它将达到1,000个左右。
—
特拉维斯·布朗
如果要对大型类型级别的数字进行算术运算,则可以考虑将它们实现为链接的位列表。
—
卡罗尔S
@KarolS我已经执行了该策略!我会很高兴,如果有人有兴趣将它有助于无形的,但它的毫无价值的,除非有人能帮助解决stackoverflow.com/questions/31768203/...
—
beefyhalo
看来stackoverflow.com/questions/31768203/…已解决,因此您可以贡献您的代码并使用自己的答案结束问题吗?
—
安德里·库巴