3 | import public Data.OrdPSQ.Internal
16 | empty : OrdPSQ k p v
26 | Winner (MkElem k p v) Start k
38 | null (Winner _ _ _) =
47 | size (Winner _ lt _) =
66 | Single (MkElem k' p v) =>
73 | case key <= maxKey tl of
75 | go (assert_smaller t tl)
77 | go (assert_smaller t tr)
100 | findMin : OrdPSQ k p v
104 | findMin (Winner (MkElem k p v) _ _) =
123 | insert key priority value =
131 | singleton key priority value
132 | Winner (MkElem k' p' v') Start _ =>
133 | case compare key k' of
135 | singleton key priority value `play` singleton k' p' v'
137 | singleton key priority value
139 | singleton k' p' v' `play` singleton key priority value
140 | Winner e (RLoser _ e' tl m tr) m' =>
143 | go (assert_smaller t (Winner e tl m)) `play` (Winner e' tr m')
145 | (Winner e tl m) `play` go (assert_smaller t (Winner e' tr m'))
146 | Winner e (LLoser _ e' tl m tr) m' =>
149 | go (assert_smaller t (Winner e' tl m)) `play` (Winner e tr m')
151 | (Winner e' tl m) `play` go (assert_smaller t (Winner e tr m'))
159 | map : (k -> p -> v -> w)
165 | goElem : Elem k p v
167 | goElem (MkElem k p x) =
168 | MkElem k p (f k p x)
169 | goLTree : LTree k p v
173 | goLTree (LLoser s e l k r) =
174 | LLoser s (goElem e) (goLTree l) k (goLTree r)
175 | goLTree (RLoser s e l k r) =
176 | RLoser s (goElem e) (goLTree l) k (goLTree r)
177 | goPSQ : OrdPSQ k p v
181 | goPSQ (Winner e l k) =
182 | Winner (goElem e) (goLTree l) k
191 | unsafeMapMonotonic : (k -> p -> v -> (q, w))
194 | unsafeMapMonotonic f =
197 | goElem : Elem k p v
199 | goElem (MkElem k p x) =
200 | let (p', x') = f k p x
202 | goLTree : LTree k p v
206 | goLTree (LLoser s e l k r) =
207 | LLoser s (goElem e) (goLTree l) k (goLTree r)
208 | goLTree (RLoser s e l k r) =
209 | RLoser s (goElem e) (goLTree l) k (goLTree r)
210 | goPSQ : OrdPSQ k p v
214 | goPSQ (Winner e l k) =
215 | Winner (goElem e) (goLTree l) k
219 | fold : (k -> p -> v -> a -> a)
227 | (Winner (MkElem k p v) t _) =>
228 | let acc' = f k p v acc
236 | go acc (LLoser _ (MkElem k p v) lt _ rt) =
237 | go (f k p v (go acc lt)) rt
238 | go acc (RLoser _ (MkElem k p v) lt _ rt) =
239 | go (f k p v (go acc lt)) rt
242 | foldr : (a -> b -> b)
248 | foldr f z (Winner e l _) =
249 | Prelude.foldr f (Data.OrdPSQ.Internal.LTree.foldr f z l) e
252 | foldl : (b -> a -> b)
258 | foldl f z (Winner e l _) =
259 | Prelude.foldl f (Data.OrdPSQ.Internal.LTree.foldl f z l) e
273 | -> Maybe (p, v, OrdPSQ k p v)
278 | Winner (MkElem k' p v) Start _ =>
284 | Winner e (RLoser _ e' tl m tr) m' =>
287 | map (\(p, v, q) => (p, v, q `play` (Winner e' tr m'))) (deleteView k (assert_smaller psq (Winner e tl m)))
289 | map (\(p, v, q) => (p, v, (Winner e tl m) `play` q)) (deleteView k (assert_smaller psq (Winner e' tr m')))
290 | Winner e (LLoser _ e' tl m tr) m' =>
293 | map (\(p, v, q) => (p, v, q `play` (Winner e tr m'))) (deleteView k (assert_smaller psq (Winner e' tl m)))
295 | map (\(p, v, q) => (p, v, (Winner e' tl m) `play` q)) (deleteView k (assert_smaller psq (Winner e tr m')))
308 | -> (Maybe (p, v), OrdPSQ k p v)
309 | insertView k p x t =
310 | case deleteView k t of
312 | (Nothing, insert k p x t)
313 | Just (p', x', _) =>
314 | (Just (p', x'), insert k p x t)
322 | secondBest Start _ =
324 | secondBest (LLoser _ e tl m tr) m' =
325 | Winner e tl m `play` secondBest tr m'
326 | secondBest (RLoser _ e tl m tr) m' =
327 | secondBest tl m `play` Winner e tr m'
335 | -> Maybe (k, p, v, OrdPSQ k p v)
338 | minView (Winner (MkElem k p v) t m) =
339 | Just (k, p, v, secondBest t m)
349 | -> (List (k, p, v), OrdPSQ k p v)
356 | -> (List(a, p, c), OrdPSQ a p c)
361 | (Winner (MkElem k p v) Start _) =>
362 | ((k, p, v) :: acc, Void)
363 | (Winner e (RLoser _ e' tl m tr) m') =>
364 | let (acc', t') = go acc (assert_smaller psq (Winner e tl m))
365 | (acc'', t'') = go acc' (assert_smaller psq (Winner e' tr m'))
366 | in (acc'', t' `play` t'')
367 | (Winner e (LLoser _ e' tl m tr) m') =>
368 | let (acc', t') = go acc (assert_smaller psq (Winner e' tl m))
369 | (acc'', t'') = go acc' (assert_smaller psq (Winner e tr m'))
370 | in (acc'', t' `play` t'')
371 | t@(Winner (MkElem _ p _) _ _) =>
376 | assert_total $
idris_crash "Data.OrdPSQ.atMostView: impossible case"
400 | Winner (MkElem k' p v) Start _ =>
406 | Winner e (RLoser _ e' tl m tr) m' =>
409 | go (assert_smaller t (Winner e tl m)) `play` (Winner e' tr m')
411 | (Winner e tl m) `play` go (assert_smaller t (Winner e' tr m'))
412 | Winner e (LLoser _ e' tl m tr) m' =>
415 | go (assert_smaller t (Winner e' tl m)) `play` (Winner e tr m')
417 | (Winner e' tl m) `play` go (assert_smaller t (Winner e tr m'))
431 | Just (_, _, _, t') =>
441 | => (Maybe (p, v) -> (b, Maybe (p, v)))
444 | -> (b, OrdPSQ k p v)
446 | let (psq', mbpv) = case deleteView k psq of
449 | Just (p, v, psq) =>
451 | (b, mbpv') = f mbpv
456 | (b, insert k p v psq')
463 | => (Maybe (k, p, v) -> (b, Maybe (k, p, v)))
465 | -> (b, OrdPSQ k p v)
467 | case minView psq of
469 | let (b, mbkpv) = f Nothing
470 | in (b, insertMay mbkpv psq)
471 | Just (k,p,v, psq') =>
472 | let (b, mbkpv) = f $
Just (k, p, v)
473 | in (b, insertMay mbkpv psq')
475 | insertMay : Maybe (k, p, v)
478 | insertMay Nothing psq =
480 | insertMay (Just (k, p, v)) psq =
496 | foldl (\q, (k, p, v) => insert k p v q) empty
500 | toList : OrdPSQ k p v
506 | Winner (MkElem k p v) l _ =>
507 | (k, p, v) :: toListLTree l
509 | toListLTree : LTree k p v
511 | toListLTree lTree =
515 | LLoser _ (MkElem k p v) l _ r =>
516 | (k, p, v) :: toListLTree l ++ toListLTree r
517 | RLoser _ (MkElem k p v) l _ r =>
518 | (k, p, v) :: toListLTree l ++ toListLTree r
522 | keys : OrdPSQ k p v
525 | [k | (k, _, _) <- toList t]
532 | Functor (OrdPSQ k p) where
533 | map f = map (\_, _, v => f v)
536 | Foldable (OrdPSQ k p) where
537 | foldl f z = Data.OrdPSQ.foldl f z
538 | foldr f z = Data.OrdPSQ.foldr f z
539 | null = Data.OrdPSQ.null