मैं खुद एक प्रयास करूंगा। मैं ट्रैविस ब्राउन या माइल्स सबिन से बेहतर जवाब को सहर्ष स्वीकार करूंगा।
वर्तमान में बड़ी संख्या का प्रतिनिधित्व करने के लिए नेट का उपयोग नहीं किया जा सकता है
नेट के वर्तमान कार्यान्वयन में, मान नेस्टेड आकारहीन की संख्या से मेल खाता है। हालांकि [] प्रकार:
scala> Nat(3)
res10: shapeless.Succ[shapeless.Succ[shapeless.Succ[shapeless._0]]] = Succ()
तो 1000000 की संख्या का प्रतिनिधित्व करने के लिए, आपके पास एक ऐसा प्रकार होगा जो 1000000 के स्तर पर गहरा होता है, जो निश्चित रूप से स्कैला संकलक को उड़ा देगा। वर्तमान सीमा प्रयोग से लगभग 400 प्रतीत होती है, लेकिन उचित संकलन समय के लिए, संभवतः 50 से नीचे रहना सबसे अच्छा होगा।
हालांकि, बड़े पूर्णांक या अन्य मानों को टाइप स्तर पर एन्कोड करने का एक तरीका है, बशर्ते कि आप उन पर गणना नहीं करना चाहते हैं । केवल एक चीज आप उन लोगों के साथ कर सकते हैं जहां तक मुझे पता है कि यह जांचना है कि वे समान हैं या नहीं। निचे देखो।
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]
^
यह Array [बाइट] पर बिट संचालन करते समय उसी सरणी आकार को लागू करने के लिए उपयोग किया जा सकता है।