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