diff --git a/Criterion/Analysis.hs b/Criterion/Analysis.hs
--- a/Criterion/Analysis.hs
+++ b/Criterion/Analysis.hs
@@ -40,6 +40,7 @@
 import Criterion.Monad (Criterion, getGen)
 import Criterion.Types
 import Data.Int (Int64)
+import Data.List.NonEmpty (NonEmpty(..))
 import Data.Maybe (fromJust)
 import Prelude ()
 import Prelude.Compat
@@ -52,6 +53,7 @@
 import Statistics.Types (Sample)
 import System.Random.MWC (GenIO)
 import qualified Data.List as List
+import qualified Data.List.NonEmpty as NE
 import qualified Data.Map as Map
 import qualified Data.Vector as V
 import qualified Data.Vector.Generic as G
@@ -207,9 +209,9 @@
     , regRSquare   = r2
     }
 
-singleton :: [a] -> Bool
-singleton [_] = True
-singleton _   = False
+singleton :: NonEmpty a -> Bool
+singleton (_ :| []) = True
+singleton _         = False
 
 -- | Given a list of accessor names (see 'measureKeys'), return either
 -- a mapping from accessor name to function or an error message if
@@ -233,8 +235,8 @@
   when (null predNames) $
     Left "no predictors specified"
   let names = respName:predNames
-      dups = map head . filter (not . singleton) .
-             List.group . List.sort $ names
+      dups = map NE.head . List.filter (not . singleton) .
+             NE.group . List.sort $ names
   unless (null dups) $
     Left $ "duplicated metric " ++ renderNames dups
   resolveAccessors names
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+1.6.3.0
+
+* Remove a use of the partial `head` function within `criterion`.
+
 1.6.2.0
 
 * Require `optparse-applicative-0.18.*` as the minimum and add an explicit
diff --git a/criterion.cabal b/criterion.cabal
--- a/criterion.cabal
+++ b/criterion.cabal
@@ -1,5 +1,5 @@
 name:           criterion
-version:        1.6.2.0
+version:        1.6.3.0
 synopsis:       Robust, reliable performance measurement and analysis
 license:        BSD3
 license-file:   LICENSE
@@ -85,7 +85,7 @@
   build-depends:
     -- TODO: Eventually, we should bump the lower version bounds to >=2 so that
     -- we can remove some CPP in Criterion.Report. See #247.
-    aeson >= 1 && < 2.2,
+    aeson >= 1 && < 2.3,
     base >= 4.5 && < 5,
     base-compat-batteries >= 0.10 && < 0.14,
     binary >= 0.5.1.0,
