Haskell中的固定大小列表(即具有类似列表的API的数组)

gat*_*ado 6 arrays haskell list

Haskell中是否有一个有效的固定大小列表库?我认为IArray当一个人只想要用自然数[包括零]索引的数组时,界面有点复杂.我想写代码

zeroToTwenty :: Int -> FixedList Int
zeroToTwenty 0 = createFixedList 21 []
zeroToTwenty n = zeroToTwenty (n-1) `append` n
Run Code Online (Sandbox Code Playgroud)

我天真的解决方案如下.

编辑:抱歉缺乏上下文; 我想要一个可以分配一次的数据结构,以避免过多的垃圾收集.这是在merge合并排序例程的上下文中,它采用两个排序的子列表并生成一个排序列表.

Don*_*art 6

使用矢量包怎么样?它提供了非常有效的可扩展向量,具有类似列表的接口和O(1)索引.

  • @gatoatigrado,奇怪的是,当你专门寻找*固定大小的*列表库时,你会想要利弊. (8认同)

Joh*_*n L 2

IArray我可能会按照 Don Stewart 的建议使用 Vector,但您可以使用ListLike来使用类似列表的界面。

  • 我希望提问者知道用“ListLike”包装数组不会神奇地提供 O(1) 时间的缺点。(请参阅提问者对唐·斯图尔特的回答的评论。) (2认同)