diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,11 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
+## [0.3.5] - 2026-10-24
+- Bump version for `containers` dependency.
+- Clean up some GHC warnings.
+- Add `hie.yaml`.
+
 ## [0.3.4] - 2025-06-28
 - Add `dijkstraAssocCost` and `dijstraAssocCostM`, which make it easier to
   handle path-dependent costs.
@@ -38,6 +43,7 @@
 ## 0.1.0 - 2017-03-07
 - Initial release
 
+[0.3.5]: https://github.com/devonhollowood/search-algorithms/compare/v0.3.4...v0.3.5
 [0.3.4]: https://github.com/devonhollowood/search-algorithms/compare/v0.3.3...v0.3.4
 [0.3.3]: https://github.com/devonhollowood/search-algorithms/compare/v0.3.2...v0.3.3
 [0.3.2]: https://github.com/devonhollowood/search-algorithms/compare/v0.3.1...v0.3.2
diff --git a/search-algorithms.cabal b/search-algorithms.cabal
--- a/search-algorithms.cabal
+++ b/search-algorithms.cabal
@@ -1,5 +1,5 @@
 name:                search-algorithms
-version:             0.3.4
+version:             0.3.5
 synopsis:            Common graph search algorithms
 description:         Library containing common graph search algorithms,
                      including depth-first and breadth-first searches,
@@ -20,7 +20,7 @@
   hs-source-dirs:      src
   exposed-modules:     Algorithm.Search
   build-depends:       base >= 4.7 && < 5
-                     , containers >= 0.5 && < 0.8
+                     , containers >= 0.5 && < 0.9
   ghc-options:         -Wall
   default-language:    Haskell2010
 
diff --git a/src/Algorithm/Search.hs b/src/Algorithm/Search.hs
--- a/src/Algorithm/Search.hs
+++ b/src/Algorithm/Search.hs
@@ -527,7 +527,8 @@
   -- incremental costs
   -> [cost]
   -- ^ List of incremental costs along given path
-incrementalCosts cost_fn states = zipWith cost_fn states (tail states)
+incrementalCosts _cost_fn [] = []
+incrementalCosts cost_fn states@(_first:rest) = zipWith cost_fn states rest
 
 -- | @incrementalCostsM@ is a monadic version of 'incrementalCosts': it has
 -- support for a monadic @const_fn@ parameter.
@@ -542,7 +543,8 @@
   -- incremental costs
   -> m [cost]
   -- ^ List of incremental costs along given path
-incrementalCostsM costM states = zipWithM costM states (tail states)
+incrementalCostsM _costM [] = return []
+incrementalCostsM costM states@(_first:rest) = zipWithM costM states rest
 
 
 -- | @next \`pruning\` predicate@ streams the elements generate by @next@ into a
@@ -756,7 +758,7 @@
     | Map.null inner = Nothing
     | otherwise = case Map.findMin inner of
       (k, [a]) -> Just ((k, a), LIFOHeap $ Map.deleteMin inner)
-      (k, a : _) -> Just ((k, a), LIFOHeap $ Map.updateMin (Just . tail) inner)
+      (k, a : _) -> Just ((k, a), LIFOHeap $ Map.updateMin (Just . drop 1) inner)
       (_, []) -> pop (LIFOHeap $ Map.deleteMin inner)
                  -- Logically, this should never happen
   push (LIFOHeap inner) (k, a) = LIFOHeap $ Map.insertWith (++) k [a] inner
