Idris 是否在向量引擎下进行了任何类型的优化?因为从外观上看,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 有数组样式的向量,但它们的具体实现对普通用户来说是不透明的,包括我在内)