如果有其他好的选择,为什么还没有具有随机访问的所有共同特征的类型类?然后,Vector和其他随机访问数据结构将具有该类型类的实例。
答案 0 :(得分:13)
不,for i in `cat file1`; do
for j in `cat file2`; do
echo $i-$j
done
done
不是你唯一的“好”选择,取决于你所说的“好”。例如,Vector
是一个类似的数据结构,具有稍微繁琐的API,但它也允许为索引集提供更丰富的选择,并且在实现细节方面有所不同,在某些情况下可能会有所帮助(例如, Array
Array
的{{1}}是位图,而Bool
的{{1}}每个元素使用一个字节。)
此外,如果两端添加和删除元素很多,那么来自Vector
的{{1}}类型可能是一个不错的选择(尽管其随机访问性能与Bool
不同在中间的Seq
,粗略地说。)
很难确定为什么没有随机访问API的标准库类型类,但请注意,Haskell通常在标准库中没有这种特定级别的数据结构API类型类。例如,基础Data.Sequence
和O(1)
数据结构API没有标准类型类,即使这些也适用于各种基于散列的地图和可用的集合。
可用的标准库类型类通常是更高级别的抽象,例如O(log n)
和Map
。
但是,Set
包提供了索引类型类抽象的集合,例如,Foldable
,Traversable
和lens
有Ixed
个实例这样:
Vector
如果Array
是上述任何一种类型(或列表或其他可索引集合的主机),则获取索引为2的元素Seq
。使用这些类型类的可能缺点是你必须购买整个v ^? ix 2
生态系统及其语法方法才能有效地使用它们。
作为替代方案,对于特定应用程序,编写特定于应用程序的类型类通常是一种合理的方法,它封装了对关键数据结构执行的操作,然后将数据结构实现为这些类型类的实例。这可以实现您想象的通用类型类的许多好处,但可以比预制的类型类和实例更灵活,而无需执行更多的工作。