我想在Haskell中创建一个基于可变数组的堆(在其他地方找到的基本类型)。有些事我不喜欢我的初步做法,但是:可变Haskell堆的类型签名
- 我用元组来表示我的堆而不是正确的数据类型的
- 我不知道如何申报我的类型使用(约太多类型变量),依靠类型推断(从哈斯克尔维基和复制的例子)
- 我的堆是不是多态
- 当
f
例如函数中使用我的堆,我已经将线穿入n
周围。
将我的堆抽象成一个很好的数据类型的最佳方式是什么?我觉得这会解决我的大部分问题。
buildHeap max_n =
do
arr <- newArray (1, max_n) 0 :: ST s (STArray s Int Int)
return (0, arr)
-- My heap needs to know the array where the elements are stored
-- and how many elements it has
f n = --example use
do
(n1, arr) <- buildHeap n
(n2, _) <- addHeap (n1, arr) 1
(n3, _) <- addHeap (n2, arr) 2
getElems arr
main = print $ runST (f 3)