deleteO :: [(Key,Weight)] -> O.PriorityQueue Int
deleteO xs = foldl' (\q k -> let (_,!q') = O.delete k q in q') pq ks
  where
    !pq = createO xs O.empty
    (ks,_) = unzip xs
deleteO :: [(Key,Weight)] -> O.PriorityQueue Int
deleteO xs = foldl' (\q k -> let (_,!q') = O.delete k q in q') pq ks
  where
    !pq = createO xs O.empty
    (ks,_) = unzip xs
deleteO xs = foldl' (\q k -> let (_,!q') = O.delete k q in q') pq ks
  where
    !pq = createO xs O.empty
    (ks,_) = unzip xs