diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -5,6 +5,11 @@
 ## Unreleased changes
 
 
+## Version 0.8.0.0
+
+-   Adapt to breaking changes in upstream libraries (`data-default`).
+
+
 ## Version 0.7.2.0
 
 -   `slynx`: Allow global normalization of mixture models.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 # The ELynx Suite
 
-Version: 0.7.2.1.
+Version: 0.8.0.0.
 Reproducible evolution made easy.
 
 <p align="center"><img src="https://travis-ci.org/dschrempf/elynx.svg?branch=master"/></p>
@@ -73,9 +73,9 @@
     # OR: stack exec slynx -- --help
     # OR: slynx --help
 
-    ELynx Suite version 0.7.2.1.
+    ELynx Suite version 0.8.0.0.
     Developed by Dominik Schrempf.
-    Compiled on June 15, 2023, at 19:54 pm, UTC.
+    Compiled on October 27, 2024, at 07:14 am, UTC.
     
     Usage: slynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME]
                  [-f|--force] [--no-elynx-file] COMMAND
@@ -143,9 +143,9 @@
     # OR: stack exec slynx -- simulate --help
     # OR: slynx simulate --help
 
-    ELynx Suite version 0.7.2.1.
+    ELynx Suite version 0.8.0.0.
     Developed by Dominik Schrempf.
-    Compiled on June 15, 2023, at 19:54 pm, UTC.
+    Compiled on October 27, 2024, at 07:14 am, UTC.
     
     Usage: slynx simulate (-t|--tree-file Name) [-s|--substitution-model MODEL]
                           [-m|--mixture-model MODEL] [-n|--global-normalization]
diff --git a/elynx-tools.cabal b/elynx-tools.cabal
--- a/elynx-tools.cabal
+++ b/elynx-tools.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               elynx-tools
-version:            0.7.2.2
+version:            0.8.0.0
 synopsis:           Tools for ELynx
 description:
   Please see the README on GitHub at <https://github.com/dschrempf/elynx>.
@@ -41,13 +41,13 @@
   build-depends:
     , aeson
     , attoparsec
-    , base                  >=4.7      && <5
+    , base                  >=4.7 && <5
     , base16-bytestring
     , bytestring
     , cryptohash-sha256
     , directory
     , hmatrix
-    , optparse-applicative  >=0.18.1.0 && <1.0
+    , optparse-applicative
     , random
     , template-haskell
     , time
diff --git a/src/ELynx/Tools/ELynx.hs b/src/ELynx/Tools/ELynx.hs
--- a/src/ELynx/Tools/ELynx.hs
+++ b/src/ELynx/Tools/ELynx.hs
@@ -35,7 +35,7 @@
 -- | ELynx transformer to be used with all executables.
 type ELynx a = ReaderT (Environment a) IO
 
-fixSeed :: Reproducible a => a -> IO a
+fixSeed :: (Reproducible a) => a -> IO a
 fixSeed x = case getSeed x of
   (Just RandomUnset) -> do
     s <- uniformM globalStdGen :: IO Int
@@ -101,7 +101,7 @@
 
 -- Get out file path with extension.
 getOutFilePath ::
-  forall a. Reproducible a => String -> ELynx a (Maybe FilePath)
+  forall a. (Reproducible a) => String -> ELynx a (Maybe FilePath)
 getOutFilePath ext = do
   a <- ask
   let bn = outFileBaseName . globalArguments $ a
@@ -114,7 +114,7 @@
 
 -- | Write a result with a given name to file with given extension or standard
 -- output. Supports compression.
-out :: Reproducible a => String -> BL.ByteString -> String -> ELynx a ()
+out :: (Reproducible a) => String -> BL.ByteString -> String -> ELynx a ()
 out name res ext = do
   mfp <- getOutFilePath ext
   case mfp of
@@ -132,7 +132,7 @@
 
 -- | Get an output handle, does not support compression. The handle has to be
 -- closed after use!
-outHandle :: Reproducible a => String -> String -> ELynx a Handle
+outHandle :: (Reproducible a) => String -> String -> ELynx a Handle
 outHandle name ext = do
   mfp <- getOutFilePath ext
   case mfp of
diff --git a/src/ELynx/Tools/Equality.hs b/src/ELynx/Tools/Equality.hs
--- a/src/ELynx/Tools/Equality.hs
+++ b/src/ELynx/Tools/Equality.hs
@@ -32,7 +32,7 @@
 import Numeric.LinearAlgebra
 
 -- | Test if all elements of a list are equal; returns True for empty list.
-allEqual :: Eq a => [a] -> Bool
+allEqual :: (Eq a) => [a] -> Bool
 -- Well, maybe it should be False, but then, it is True that all elements are
 -- equal :).
 allEqual [] = True
diff --git a/src/ELynx/Tools/Logger.hs b/src/ELynx/Tools/Logger.hs
--- a/src/ELynx/Tools/Logger.hs
+++ b/src/ELynx/Tools/Logger.hs
@@ -82,7 +82,7 @@
 msgPrepare pref msg = BL.intercalate "\n" $ map (BL.append pref) $ BL.lines msg
 
 -- Make sure that concurrent output is not scrambled.
-atomicAction :: HasLock e => IO () -> Logger e ()
+atomicAction :: (HasLock e) => IO () -> Logger e ()
 atomicAction a = do
   l <- reader getLock
   liftIO $ withMVar l (const a)
@@ -181,7 +181,7 @@
     renderDecimal n = alignRightWithNoTrim '0' 2 $ BB.toLazyByteString $ BB.intDec n
 
 -- Render a time stamp.
-renderTime :: FormatTime t => t -> String
+renderTime :: (FormatTime t) => t -> String
 renderTime = formatTime defaultTimeLocale "%B %-e, %Y, at %H:%M %P, %Z."
 
 -- | Log header.
diff --git a/src/ELynx/Tools/Options.hs b/src/ELynx/Tools/Options.hs
--- a/src/ELynx/Tools/Options.hs
+++ b/src/ELynx/Tools/Options.hs
@@ -137,11 +137,11 @@
   }
   deriving (Eq, Show, Generic)
 
-instance FromJSON a => FromJSON (Arguments a)
+instance (FromJSON a) => FromJSON (Arguments a)
 
-instance ToJSON a => ToJSON (Arguments a)
+instance (ToJSON a) => ToJSON (Arguments a)
 
-instance Reproducible a => Reproducible (Arguments a) where
+instance (Reproducible a) => Reproducible (Arguments a) where
   inFiles = inFiles . local
   outSuffixes = outSuffixes . local
   getSeed = getSeed . local
@@ -171,7 +171,7 @@
 -- | Parse arguments. Provide a global description, header, footer, and so on.
 -- Custom additional description (first argument) and footer (second argument)
 -- can be provided. print help if needed.
-parseArguments :: forall a. Reproducible a => IO (Arguments a)
+parseArguments :: forall a. (Reproducible a) => IO (Arguments a)
 parseArguments =
   execParser $
     elynxParserInfo (cmdDsc @a) (cmdFtr @a) (argumentsParser $ parser @a)
@@ -194,7 +194,7 @@
 
 -- | Create a command; convenience function.
 createCommandReproducible ::
-  forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
+  forall a b. (Reproducible a) => (a -> b) -> Mod CommandFields b
 createCommandReproducible f =
   command (cmdName @a) $
     f
diff --git a/src/ELynx/Tools/Reproduction.hs b/src/ELynx/Tools/Reproduction.hs
--- a/src/ELynx/Tools/Reproduction.hs
+++ b/src/ELynx/Tools/Reproduction.hs
@@ -75,7 +75,7 @@
   cmdFtr = []
 
 -- | A unique hash of the reproduction data type.
-getReproductionHash :: forall a. Reproducible a => Reproduction a -> String
+getReproductionHash :: forall a. (Reproducible a) => Reproduction a -> String
 getReproductionHash r =
   BS.unpack $
     encode $
@@ -97,7 +97,7 @@
   where
     ri = reproducible r
 
-setHash :: Reproducible a => Reproduction a -> Reproduction a
+setHash :: (Reproducible a) => Reproduction a -> Reproduction a
 setHash r = r {rHash = Just h} where h = getReproductionHash r
 
 -- | Necessary information for a reproducible run. Notably, the input files are
@@ -119,9 +119,9 @@
   }
   deriving (Generic)
 
-instance FromJSON a => FromJSON (Reproduction a)
+instance (FromJSON a) => FromJSON (Reproduction a)
 
-instance ToJSON a => ToJSON (Reproduction a)
+instance (ToJSON a) => ToJSON (Reproduction a)
 
 -- | Helper function.
 hashFile :: FilePath -> IO BS.ByteString
