我想在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)