module Indexation.Utils.Unfoldr where import Indexation.Prelude import DeferredFolds.Unfoldr import qualified Data.HashMap.Strict as HashMap import qualified Data.Vector.Unboxed.Bit as BitVec hashMapAt :: (Hashable a, Eq a) => a -> HashMap a b -> Unfoldr b hashMapAt a = foldable . HashMap.lookup a hashMapValuesByKeys :: (Hashable a, Eq a, Foldable foldable) => foldable a -> HashMap a b -> Unfoldr b hashMapValuesByKeys keys hashMap = do key <- foldable keys hashMapAt key hashMap bitVecWords :: BitVector -> Unfoldr Word bitVecWords vec = do index <- intsInRange 0 (pred (BitVec.wordLength vec)) return (BitVec.indexWord vec index)