diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,7 @@
-import Distribution.Simple
-main = defaultMain
+module Main (main) where
+
+import RIO
+import Distribution.Extra.Doctest ( defaultMainWithDoctests )
+
+main :: IO ()
+main = defaultMainWithDoctests "doctests"
diff --git a/src/Tonalude/Prelude/Reexports.hs b/src/Tonalude/Prelude/Reexports.hs
--- a/src/Tonalude/Prelude/Reexports.hs
+++ b/src/Tonalude/Prelude/Reexports.hs
@@ -5,9 +5,6 @@
   , Alternative
   , Applicative (..)
   , liftA
-#if !MIN_VERSION_base(4, 10, 0)
-  , liftA2
-#endif
   , liftA3
   , many
   , optional
diff --git a/test/DocTest.hs b/test/DocTest.hs
deleted file mode 100644
--- a/test/DocTest.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-module Main (main) where
-
-import RIO
-
-import System.FilePath.Glob (glob)
-import Test.DocTest (doctest)
-
-main :: IO ()
-main = glob "src/**/*.hs" >>= doDocTest
-
-doDocTest :: [String] -> IO ()
-doDocTest options =
-  doctest $
-    options <>
-    ghcExtensions
-
-ghcExtensions :: [String]
-ghcExtensions =
-    [ "-XBangPatterns"
-    , "-XBinaryLiterals"
-    , "-XConstraintKinds"
-    , "-XDataKinds"
-    , "-XDefaultSignatures"
-    , "-XDeriveDataTypeable"
-    , "-XDeriveFoldable"
-    , "-XDeriveFunctor"
-    , "-XDeriveGeneric"
-    , "-XDeriveTraversable"
-    , "-XDoAndIfThenElse"
-    , "-XEmptyDataDecls"
-    , "-XExistentialQuantification"
-    , "-XFlexibleContexts"
-    , "-XFlexibleInstances"
-    , "-XFunctionalDependencies"
-    , "-XGADTs"
-    , "-XGeneralizedNewtypeDeriving"
-    , "-XInstanceSigs"
-    , "-XKindSignatures"
-    , "-XLambdaCase"
-    , "-XMultiParamTypeClasses"
-    , "-XMultiWayIf"
-    , "-XNamedFieldPuns"
-    , "-XNoImplicitPrelude"
-    , "-XOverloadedStrings"
-    , "-XPartialTypeSignatures"
-    , "-XPatternGuards"
-    , "-XPolyKinds"
-    , "-XRankNTypes"
-    , "-XRecordWildCards"
-    , "-XScopedTypeVariables"
-    , "-XStandaloneDeriving"
-    , "-XTupleSections"
-    , "-XTypeFamilies"
-    , "-XTypeSynonymInstances"
-    , "-XViewPatterns"
-    ]
diff --git a/test/doctests.hs b/test/doctests.hs
new file mode 100644
--- /dev/null
+++ b/test/doctests.hs
@@ -0,0 +1,9 @@
+module Main where
+
+import RIO
+import Build_doctests (flags, pkgs, module_sources)
+import Test.DocTest
+
+main :: IO ()
+main = do
+  doctest $ flags ++ pkgs ++ module_sources
diff --git a/tonalude.cabal b/tonalude.cabal
--- a/tonalude.cabal
+++ b/tonalude.cabal
@@ -1,13 +1,11 @@
-cabal-version: 1.12
+cabal-version: 1.24
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.35.1.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: fa68c2b3443518c8b8a8aa0fbd398c47fe2fef2bf724f722b1d813c5ab65b666
 
 name:           tonalude
-version:        0.1.1.1
+version:        0.2.0.0
 synopsis:       A standard library for Tonatona framework.
 description:    Tonaparser provides a way to pass runtime configurations. This library is supposed to be used with @tonatona@. The Tonalude module works as a prelude replacement for Tonatona framework, providing more functionality and types out of the box than the standard prelude (such as common data types like ByteString and Text), as well as removing common "gotchas", like partial functions and lazy I/O.
 category:       Control, Library, Tonatona
@@ -18,7 +16,9 @@
 copyright:      2018 Kadzuya Okamoto
 license:        MIT
 license-file:   LICENSE
-build-type:     Simple
+build-type:     Custom
+tested-with:
+    GHC==9.4.6, GHC==9.2.8, GHC==9.0.2, GHC==8.10.7
 extra-source-files:
     README.md
 
@@ -26,6 +26,13 @@
   type: git
   location: https://github.com/tonatona-project/tonatona
 
+custom-setup
+  setup-depends:
+      Cabal <3.12
+    , base >=4.14 && <4.18
+    , cabal-doctest >=1 && <1.1
+    , rio ==0.1.*
+
 library
   exposed-modules:
       Tonalude
@@ -40,26 +47,99 @@
       Tonalude.Prelude.Trace
   hs-source-dirs:
       src
-  default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
+  default-extensions:
+      BangPatterns
+      BinaryLiterals
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveFoldable
+      DeriveFunctor
+      DeriveGeneric
+      DeriveTraversable
+      DoAndIfThenElse
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      MultiWayIf
+      NamedFieldPuns
+      NoImplicitPrelude
+      OverloadedStrings
+      PartialTypeSignatures
+      PatternGuards
+      PolyKinds
+      RankNTypes
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeFamilies
+      TypeSynonymInstances
+      ViewPatterns
   ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
-      base >=4.7 && <4.15
-    , bytestring >=0.10 && <0.11
+      base >=4.14 && <4.18
+    , bytestring >=0.10 && <0.12
     , rio >=0.1.5 && <0.2
     , unliftio >=0.2.4 && <0.3
   default-language: Haskell2010
 
-test-suite doctest
+test-suite doctests
   type: exitcode-stdio-1.0
-  main-is: DocTest.hs
+  main-is: doctests.hs
   hs-source-dirs:
       test
-  default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
+  default-extensions:
+      BangPatterns
+      BinaryLiterals
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveFoldable
+      DeriveFunctor
+      DeriveGeneric
+      DeriveTraversable
+      DoAndIfThenElse
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      MultiWayIf
+      NamedFieldPuns
+      NoImplicitPrelude
+      OverloadedStrings
+      PartialTypeSignatures
+      PatternGuards
+      PolyKinds
+      RankNTypes
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeFamilies
+      TypeSynonymInstances
+      ViewPatterns
   ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
-      Glob
-    , base >=4.7 && <4.15
-    , bytestring >=0.10 && <0.11
+      base >=4.14 && <4.18
+    , bytestring >=0.10 && <0.12
     , doctest
     , rio >=0.1.5 && <0.2
     , unliftio >=0.2.4 && <0.3
@@ -70,11 +150,48 @@
   main-is: Spec.hs
   hs-source-dirs:
       test
-  default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
+  default-extensions:
+      BangPatterns
+      BinaryLiterals
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveFoldable
+      DeriveFunctor
+      DeriveGeneric
+      DeriveTraversable
+      DoAndIfThenElse
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      MultiWayIf
+      NamedFieldPuns
+      NoImplicitPrelude
+      OverloadedStrings
+      PartialTypeSignatures
+      PatternGuards
+      PolyKinds
+      RankNTypes
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeFamilies
+      TypeSynonymInstances
+      ViewPatterns
   ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
-      base >=4.7 && <4.15
-    , bytestring >=0.10 && <0.11
+      base >=4.14 && <4.18
+    , bytestring >=0.10 && <0.12
     , rio >=0.1.5 && <0.2
     , unliftio >=0.2.4 && <0.3
   default-language: Haskell2010
