@@ -61,11 +61,10 @@ orderBySize left centre right =
61 largest : Nat
61 largest : Nat
62 largest = maximum (size left) $ maximum (size centre) (size right)
62 largest = maximum (size left) $ maximum (size centre) (size right)
64−%assert_total -- relies on orderBySize doing the right thing
65merge : Ord a => MaxiphobicHeap a -> MaxiphobicHeap a -> MaxiphobicHeap a
64merge : Ord a => MaxiphobicHeap a -> MaxiphobicHeap a -> MaxiphobicHeap a
66merge Empty right = right
65merge Empty right = right
67merge left Empty = left
66merge left Empty = left
68−merge (Node ls ll le lr) (Node rs rl re rr) =
67+merge (Node ls ll le lr) (Node rs rl re rr) = assert_total $ -- relies on orderBySize doing the right thing
69 if le < re then
68 if le < re then
70 let (largest, b, c) = orderBySize ll lr (Node rs rl re rr) in
69 let (largest, b, c) = orderBySize ll lr (Node rs rl re rr) in
71 Node mergedSize largest le (merge b c)
70 Node mergedSize largest le (merge b c)
@@ -99,9 +98,9 @@ toList : Ord a => MaxiphobicHeap a -> List a
99toList Empty = []
98toList Empty = []
100toList (Node s l e r) = toList' (Node s l e r) Refl
99toList (Node s l e r) = toList' (Node s l e r) Refl
102− %assert_total -- relies on deleteMinimum making heap smaller
103 toList' : Ord a => (h : MaxiphobicHeap a) -> (isEmpty h = False) -> List a
101 toList' : Ord a => (h : MaxiphobicHeap a) -> (isEmpty h = False) -> List a
102+ toList' heap p = assert_total $ -- relies on deleteMinimum making heap smaller
104− toList' heap p = findMinimum heap p :: (Heap.toList (deleteMinimum heap p))
103+ findMinimum heap p :: (Heap.toList (deleteMinimum heap p))
106fromList : Ord a => List a -> MaxiphobicHeap a
105fromList : Ord a => List a -> MaxiphobicHeap a
107fromList = foldr insert empty
106fromList = foldr insert empty