7 | data PairingHeap a = E | T a (List (PairingHeap a))
10 | mergePairs : Ord a => List (PairingHeap a) -> PairingHeap a
13 | mergePairs (h1 :: h2 :: hs) = merge (merge h1 h2) (mergePairs hs)
16 | Heap PairingHeap where
21 | insert x h = merge (T x []) h
25 | merge h1@(T x hs1) h2@(T y hs2) =
26 | if x < y then T x (h2 :: hs1) else T y (h1 :: hs2)
28 | findMin E = assert_total $
idris_crash "empty heap"
29 | findMin (T x hs) = x
31 | deleteMin E = assert_total $
idris_crash "empty heap"
32 | deleteMin (T x hs) = assert_total $
mergePairs hs