【发布时间】:2015-02-17 12:46:46
【问题描述】:
Idris 是否在向量引擎下进行了任何类型的优化?因为从外观上看,Idris 向量只是一个已知大小(在编译时已知)的链表。事实上,一般来说,您似乎可以表达以下等价(我在语法上猜测了一下):
Vector : Nat -> Type -> Type
Vector n t = (l: List t ** length l = n)
因此,虽然这在防止范围错误方面很好,但向量的真正优势(在该术语的传统用法中)是在性能方面;特别是 O(1) 随机访问。 idris 向量似乎不支持这一点(您将如何编写索引函数来获得这种性能?)。
- 假设内部没有魔法(就像
Nat那样)重新配置Vectors,Idris 中是否存在随机访问数据类型? - 如何在代数类型系统中定义这样的东西?当然,似乎无法归纳地定义它。
- 是否有可能在像 Idris 这样的类型系统中创建支持 O(1) 随机访问的数据类型,并且知道它的长度,以便所有访问都可以证明是有效的? (Haskell 有数组样式的向量,但它们的具体实现对普通用户来说是不透明的,包括我在内)
【问题讨论】:
标签: vector linked-list algebraic-data-types idris