Kendim denerim. Travis Brown veya Miles Sabin'den daha iyi bir cevap memnuniyetle kabul edeceğim.
Nat anda olabilir değil çok sayıda temsil etmek için kullanılabilir
Nat'in şu anki uygulamasında, değer iç içe biçimli şekilsiz.Succ [] türlerinin sayısına karşılık gelir:
scala> Nat(3)
res10: shapeless.Succ[shapeless.Succ[shapeless.Succ[shapeless._0]]] = Succ()
Yani 1000000 sayısını temsil etmek için, 1000000 derinlikte iç içe geçmiş bir tipiniz olacak ve bu kesinlikle scala derleyicisini havaya uçuracaktır. Mevcut sınır denemeden yaklaşık 400 gibi görünüyor, ancak makul derleme süreleri için muhtemelen 50'nin altında kalmak en iyisi olacaktır.
Ancak, büyük tam sayıları veya diğer değerleri tür düzeyinde kodlamak için bir yol vardır, ancak bunlar üzerinde hesaplamalar yapmak istemezsiniz . Bildiğim kadarıyla bunlarla yapabileceğiniz tek şey, eşit olup olmadıklarını kontrol etmektir. Aşağıya bakınız.
scala> type OneMillion = Witness.`1000000`.T
defined type alias OneMillion
scala> type AlsoOneMillion = Witness.`1000000`.T
defined type alias AlsoOneMillion
scala> type OneMillionAndOne = Witness.`1000001`.T
defined type alias OneMillionAndOne
scala> implicitly[OneMillion =:= AlsoOneMillion]
res0: =:=[OneMillion,AlsoOneMillion] = <function1>
scala> implicitly[OneMillion =:= OneMillionAndOne]
<console>:16: error: Cannot prove that OneMillion =:= OneMillionAndOne.
implicitly[OneMillion =:= OneMillionAndOne]
^
Bu, Array [Byte] üzerinde bit işlemleri yaparken aynı dizi boyutunu uygulamak için kullanılabilir.