diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,8 @@
+* 0.3 (27 June 2026)
+
+  - Fix more pattern-match warnings, change additional list parameters
+    to `NonEmpty` in `solveTriDiagonal` and `solveCyclicTridiagonal`.
+
 * 0.2 (2 May 2026)
 
   - Fixes for various pattern-match warnings
diff --git a/diagrams-solve.cabal b/diagrams-solve.cabal
--- a/diagrams-solve.cabal
+++ b/diagrams-solve.cabal
@@ -1,5 +1,5 @@
 name:                diagrams-solve
-version:             0.2
+version:             0.3
 synopsis:            Pure Haskell solver routines used by diagrams
 description:         Pure Haskell solver routines used by the diagrams
                      project.  Currently includes finding real roots
@@ -23,7 +23,7 @@
 library
   exposed-modules:     Diagrams.Solve.Polynomial,
                        Diagrams.Solve.Tridiagonal
-  build-depends:       base >=4.5 && < 5.0
+  build-depends:       base >=4.5 && < 5
   hs-source-dirs:      src
   default-language:    Haskell2010
 
@@ -33,7 +33,7 @@
   -- other-modules: Instances
   hs-source-dirs: tests
   default-language:    Haskell2010
-  build-depends:       base >= 4.2 && < 5.0,
+  build-depends:       base >= 4.2 && < 5,
                        diagrams-solve,
                        tasty >= 0.10 && < 1.6,
                        tasty-quickcheck >= 0.8 && < 0.12
diff --git a/src/Diagrams/Solve/Tridiagonal.hs b/src/Diagrams/Solve/Tridiagonal.hs
--- a/src/Diagrams/Solve/Tridiagonal.hs
+++ b/src/Diagrams/Solve/Tridiagonal.hs
@@ -19,22 +19,27 @@
 --   where 'A' is an 'n' by 'n' matrix with 'bs' as the main diagonal
 --   and 'as' the diagonal below and 'cs' the diagonal above.  See:
 --   <http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm>
-solveTriDiagonal :: Fractional a => [a] -> NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a
+solveTriDiagonal :: Fractional a => NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a
 solveTriDiagonal as (b0 :| bs) (c0 :| cs) (d0 :| ds) = h cs' ds'
  where
   cs' = c0 / b0 : f cs' as bs cs
-  f _ [_] _ _ = []
-  f (c' : cs') (a : as) (b : bs) (c : cs) = c / (b - c' * a) : f cs' as bs cs
-  f _ _ _ _ = error "solveTriDiagonal.f: impossible!"
+  f [] _ _ _ = []
+  f _ (_ :| []) _ _ = []
+  f _ _ [] _ = []
+  f _ _ _ [] = []
+  f (c' : cs') (a :| (a' : as)) (b : bs) (c : cs) = c / (b - c' * a) : f cs' (a' :| as) bs cs
 
-  ds' = d0 / b0 : g ds' as bs cs' ds
+  ds' = d0 / b0 :| g (NE.toList ds') (NE.toList as) bs cs' ds
+  g [] _ _ _ _ = []
   g _ [] _ _ _ = []
+  g _ _ [] _ _ = []
+  g _ _ _ [] _ = []
+  g _ _ _ _ [] = []
   g (d' : ds') (a : as) (b : bs) (c' : cs') (d : ds) = (d - d' * a) / (b - c' * a) : g ds' as bs cs' ds
-  g _ _ _ _ _ = error "solveTriDiagonal.g: impossible!"
 
-  h _ [d] = d :| []
-  h (c : cs) (d : ds) = let xs@(x :| _) = h cs ds in d - c * x <| xs
-  h _ _ = error "solveTriDiagonal.h: impossible!"
+  h _ (d :| []) = d :| []
+  h [] (d :| _) = d :| []
+  h (c : cs) (d :| (d' : ds)) = let xs@(x :| _) = h cs (d' :| ds) in d - c * x <| xs
 
 -- Helper that applies the passed function only to the last element of a list
 modifyLast :: (a -> a) -> [a] -> [a]
@@ -54,7 +59,7 @@
 -- | Solves a system similar to the tri-diagonal system using a special case
 --   of the Sherman-Morrison formula (<http://en.wikipedia.org/wiki/Sherman-Morrison_formula>).
 --   This code is based on /Numerical Recpies in C/'s @cyclic@ function in section 2.7.
-solveCyclicTriDiagonal :: Fractional a => [a] -> NonEmpty a -> NonEmpty a -> NonEmpty a -> a -> a -> NonEmpty a
+solveCyclicTriDiagonal :: Fractional a => NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a -> a -> a -> NonEmpty a
 solveCyclicTriDiagonal as (b0 :| bs) cs ds alpha beta = NE.zipWith ((+) . (fact *)) zs xs
  where
   gamma = -b0
