diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,9 @@
+## 0.15.1.0
+
+* `skipped-haddocks`
+* Support for GHC 8.2
+* Switch from cryptohash to cryptonite
+
 ## 0.15.0.0
 
 * Ignore packages with invalid flag definitions [fpco/stackage#2468](https://github.com/fpco/stackage/issues/2468)
diff --git a/Stackage/BuildConstraints.hs b/Stackage/BuildConstraints.hs
--- a/Stackage/BuildConstraints.hs
+++ b/Stackage/BuildConstraints.hs
@@ -125,6 +125,8 @@
     , cfExpectedBenchFailures   :: Set PackageName
     , cfExpectedHaddockFailures :: Set PackageName
     , cfSkippedBenchmarks       :: Set PackageName
+    , cfSkippedHaddocks         :: !(Set PackageName)
+    -- ^ Haddocks which should not be built
     , cfPackages                :: Map Maintainer (Vector Dependency)
     , cfGithubUsers             :: Map Text (Set Text)
     , cfBuildToolOverrides      :: Map Text (Set Text)
@@ -151,6 +153,7 @@
                                <|> pure mempty -- backwards compat
         cfExpectedHaddockFailures <- getPackages o "expected-haddock-failures"
         cfSkippedBenchmarks <- getPackages o "skipped-benchmarks"
+        cfSkippedHaddocks <- getPackages o "skipped-haddocks" <|> return mempty
         cfSkippedLibProfiling <- getPackages o "skipped-profiling"
         cfPackages <- o .: "packages"
                   >>= mapM (mapM toDep)
@@ -232,8 +235,8 @@
             | name `member` cfExpectedBenchFailures = ExpectFailure
             | otherwise = ExpectSuccess
         pcHaddocks
+            | name `member` cfSkippedHaddocks = Don'tBuild
             | name `member` cfExpectedHaddockFailures = ExpectFailure
-
             | otherwise = ExpectSuccess
         pcFlagOverrides = fromMaybe mempty $ lookup name cfPackageFlags
         pcConfigureArgs = fromMaybe mempty $ lookup name cfConfigureArgs
diff --git a/Stackage/Curator/UploadDocs.hs b/Stackage/Curator/UploadDocs.hs
--- a/Stackage/Curator/UploadDocs.hs
+++ b/Stackage/Curator/UploadDocs.hs
@@ -19,8 +19,7 @@
                                                 runRWSIORefT, tell)
 import           Crypto.Hash                   (Digest, SHA256)
 import           Crypto.Hash.Conduit           (sinkHash)
-import           Data.Byteable                 (toBytes)
-import qualified Data.ByteString.Base16        as B16
+import           Data.ByteArray                (convert)
 import           Data.Conduit.Zlib             (WindowBits (WindowBits),
                                                 compress)
 import           Data.Function                 (fix)
@@ -46,6 +45,7 @@
 import           Text.HTML.DOM                 (eventConduit)
 import           Text.XML                      (fromEvents)
 import Control.Concurrent (threadDelay)
+import Data.ByteArray.Encoding
 
 upload :: (MonadResource m)
        => Bool -- ^ compression?
@@ -253,7 +253,7 @@
 toHash :: M m => FilePath -> m Text
 toHash src = do
     (digest, lbs) <- sourceFile src $$ sink
-    let hash' = unpack $ decodeUtf8 $ B16.encode $ toBytes (digest :: Digest SHA256)
+    let hash' = unpack $ decodeUtf8 $ asByteString $ convertToBase Base16 (digest :: Digest SHA256)
         name = pack $ F.encodeString $ F.addExtensions (fromString $ "byhash" </> hash') (F.extensions $ fromString src)
     (m, s) <- get
     unless (name `member` s) $ do
diff --git a/Stackage/GithubPings.hs b/Stackage/GithubPings.hs
--- a/Stackage/GithubPings.hs
+++ b/Stackage/GithubPings.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE ViewPatterns      #-}
 {-# LANGUAGE GADTs             #-}
+{-# LANGUAGE FlexibleContexts  #-}
 module Stackage.GithubPings
     ( getGithubPings
     , applyGithubMapping
diff --git a/Stackage/PackageIndex.hs b/Stackage/PackageIndex.hs
--- a/Stackage/PackageIndex.hs
+++ b/Stackage/PackageIndex.hs
@@ -43,15 +43,13 @@
 import           Stackage.GithubPings
 import           System.Directory                      (getAppUserDataDirectory, createDirectoryIfMissing, doesFileExist)
 import           System.FilePath                       (takeDirectory)
-import qualified Data.ByteString.Base16                as B16
-import qualified Crypto.Hash.SHA256                    as SHA256
 import           Crypto.Hash                 (MD5 (..), SHA1 (..), SHA256 (..),
                                               SHA512 (..), Skein512_512 (..), hashlazy,
-                                              Digest, HashAlgorithm, digestToHexByteString)
-import qualified Crypto.Hash.SHA1 as SHA1
+                                              Digest, HashAlgorithm)
 import           Data.Store                            (Store (..), Size (..))
 import qualified Data.Store                            as Store
 import qualified Data.Store.TypeHash                   as Store
+import Data.ByteArray.Encoding
 
 -- | Name of the 00-index.tar downloaded from Hackage.
 getPackageIndexPath :: MonadIO m => m FilePath
@@ -157,19 +155,19 @@
             let go :: (Show ha, HashAlgorithm ha) => ha -> (Text, Text)
                 go constr = (tshow constr, unwrap constr (hashlazy raw))
                 unwrap :: ha -> Digest ha -> Text
-                unwrap _ = decodeUtf8 . digestToHexByteString
+                unwrap _ = decodeUtf8 . convertToBase Base16
              in mapFromList
                     [ go SHA1
                     , go SHA256
                     , go SHA512
                     , go Skein512_512
                     , go MD5
-                    , ("GitSHA1", decodeUtf8 $ B16.encode $ SHA1.hashlazy $ concat
+                    , ("GitSHA1", decodeUtf8 $ convertToBase Base16 (hashlazy $ concat
                         [ "blob "
                         , fromStrict $ encodeUtf8 $ tshow $ length raw
                         , "\0"
                         , raw
-                        ])
+                        ] :: Digest SHA1))
                     ]
         }
     , spdCondLibrary = mapCondTree simpleLib <$> condLibrary gpd
@@ -224,7 +222,7 @@
     tryIO' = try
 
     -- location of the binary cache
-    cache = root </> "cache" </> (unpack $ decodeUtf8 $ B16.encode $ SHA256.hashlazy lbs)
+    cache = root </> "cache" </> (unpack $ decodeUtf8 $ asByteString $ convertToBase Base16 (hashlazy lbs :: Digest SHA256))
 
     -- Parse the desc from the contents of the .cabal file
     parseFromText = do
diff --git a/stackage-curator.cabal b/stackage-curator.cabal
--- a/stackage-curator.cabal
+++ b/stackage-curator.cabal
@@ -1,5 +1,5 @@
 name:                stackage-curator
-version:             0.15.0.0
+version:             0.15.1.0
 synopsis:            Tools for curating Stackage bundles
 description:         Please see <http://www.stackage.org/package/stackage-curator> for a description and documentation.
 homepage:            https://github.com/fpco/stackage-curator
@@ -82,10 +82,9 @@
                      , amazonka-s3
                      , amazonka-core
                      , xml-types
-                     , base16-bytestring
-                     , byteable
-                     , cryptohash
-                     , cryptohash-conduit
+                     , cryptonite
+                     , cryptonite-conduit
+                     , memory
                      , resourcet
                      , lucid
                      , store
