Проводит ли Идрис какую-либо оптимизацию под капотом векторов? Потому что, судя по всему, вектор Идриса - это просто связанный список с известным размером (известным во время компиляции). Фактически, в целом кажется, что вы могли бы выразить следующую эквивалентность (я немного догадываюсь о синтаксисе):
Vector : Nat -> Type -> Type
Vector n t = (l: List t ** length l = n)
Так что, хотя это хорошо с точки зрения предотвращения ошибок диапазона, реальное преимущество векторов (в традиционном использовании этого термина) заключается в производительности; в частности, произвольный доступ O (1). Кажется, что вектор idris не поддерживает это (как бы вы написали функцию индексации, чтобы иметь такую производительность?).
- Если предположить, что под капотом не происходит никакого волшебства (как это происходит с
Nat
) для перенастройкиVector
s, существует ли в Идрисе тип данных с произвольным доступом? - Как бы такая вещь была определена в системе алгебраических типов? Конечно, кажется, что невозможно определить его индуктивно.
- Возможно ли в такой системе типов, как у Идриса, создать тип данных, который поддерживает произвольный доступ O (1), и знает его длину, так что весь доступ доказуемо действителен? (В Haskell есть векторы в стиле массива, но их конкретная реализация непонятна среднему пользователю, включая меня)