Это продолжение вопроса, который я задал почти два года назад. Я все еще экспериментирую с системой типов, чтобы написать небольшую библиотеку линейной алгебры, в которой размеры векторов/матриц/тензоров кодируются с использованием системы типов (с нумерацией Пеано). Это позволяет компилятору ограничивать двоичные операции объектами соответствующих размеров.
Это работает хорошо, но я должен указать каждый тип измерения вручную. Например (используя бесформенные натуральные числа< /а>):
type _1 = Succ[Nat._0]
type _2 = Succ[_1]
type _3 = Succ[_2]
Это нормально для небольших размеров, но становится скучно, если мне нужно определить размер _1024
. Я пытаюсь (безуспешно) найти способ преобразовать (во время компиляции) целочисленный литерал в соответствующий тип числа Пеано.
В комментариях Daniel Sobral answer мне сказали, что это невозможно, потому что Scala не поддерживает зависимые типы. Теперь в Scala 2.10 есть как зависимые типы, так и макросы. Так есть ли способ достичь этого?