diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,14 @@
 # Revsion history of io-classes
 
-## next release
+## 1.4.0.0
 
 ### Breaking changes
 
+* Removed deprecated module `Control.Monad.Class.MonadVar`.
+
 ### Non-breaking changes
+
+* Fixed some module haddock typos.
 
 ## 1.3.1.0
 
diff --git a/NOTICE b/NOTICE
--- a/NOTICE
+++ b/NOTICE
@@ -1,4 +1,4 @@
-Copyright 2019-2023 Input Output Global Inc (IOG)
+Copyright 2019-2024 Input Output Global Inc (IOG)
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -80,7 +80,38 @@
 * [MonadST]: provides a way to lift `ST`-computations.
 * [MonadSay]: dummy debugging interface
 
+## Differences from `base`, `async`, or `exceptions` packages
 
+### Major differences
+
+* `getMonotonicTime` returns `Time` (a newtype wrapper around `DiffTime`)
+* `Deadlock` exceptions are not thrown to the main thread (see
+  [ref][io-deadlock]), so they cannot be caught. This was a design decision,
+  which allows to catch all deadlocks which otherwise could be captured by
+  a `catch`.
+
+### Minor differences
+
+Some of the types have more general kind signatures, e.g.
+
+```
+type Async :: (Type -> Type) -> Type -> Type
+```
+
+The first type of kind `Type -> Type` describes the monad which could be
+instantiated to `IO`, `IOSim` or some other monad stacks built with monad
+transformers.  The same applies to many other types, e.g. `TVar`, `TMVar`.
+
+The following types although similar to the originals are not the same as the
+ones that come from `base`, `async`, or `exceptions` packages:
+
+* `Handler` (origin: `base`)
+* `MaskingState` (origin: `base`)
+* `Concurrently` (origin: `async`)
+* `ExceptionInLinkedThread` (origin: `async`): `io-class`es version does not
+  store `Async`
+* `ExitCase` (origin: `exceptions`)
+
 ## Debuging & Insepction
 
 We provide quite extended debugging & inspection API.  This proved to be
@@ -117,6 +148,7 @@
 [contributing]: https://www.github.com/input-output-hk/io-sim/tree/master/CONTRIBUTING.md
 [`nothunks`]: https://hackage.haskell.org/package/nothunks
 [labelThread-base]: https://hackage.haskell.org/package/base-4.17.0.0/docs/GHC-Conc-Sync.html#v:labelThread
+[io-deadlock]: https://hackage.haskell.org/package/base-4.19.0.0/docs/Control-Exception.html#t:Deadlock
 
 [MonadEventlog]: https://hackage.haskell.org/package/io-sim-classes/docs/Control-Monad-Class-MonadEventlog.html#t:MonadEventlog
 [Debug.Trace]: https://hackage.haskell.org/package/base/docs/Debug-Trace.html
diff --git a/io-classes.cabal b/io-classes.cabal
--- a/io-classes.cabal
+++ b/io-classes.cabal
@@ -1,14 +1,18 @@
 cabal-version:       3.0
 name:                io-classes
-version:             1.3.1.0
+version:             1.4.0.0
 synopsis:            Type classes for concurrency with STM, ST and timing
 description:
   IO Monad class hierarchy compatible with
-  [io-sim](https://hackage.haskell.org/package/io-sim), 'base', 'async',
-  'stm', 'exceptions' & 'time' packages.
+  [io-sim](https://hackage.haskell.org/package/io-sim),
+  [base](https://hackage.haskell.org/package/base),
+  [async](https://hackage.haskell.org/package/async),
+  [stm](https://hackage.haskell.org/package/stm),
+  [exceptions](https://hackage.haskell.org/package/exceptions) &
+  [time](https://hackage.haskell.org/package/time) packages.
 license:             Apache-2.0
 license-files:       LICENSE NOTICE
-copyright:           2019-2023 Input Output Global Inc (IOG)
+copyright:           2019-2024 Input Output Global Inc (IOG)
 author:              Alexander Vieth, Duncan Coutts, Marcin Szamotulski, Thomas Winant
 maintainer:          Duncan Coutts duncan@well-typed.com, Marcin Szamotulski coot@coot.me
 category:            Control
@@ -56,7 +60,6 @@
                        Control.Monad.Class.MonadAsync
                        Control.Monad.Class.MonadEventlog
                        Control.Monad.Class.MonadFork
-                       Control.Monad.Class.MonadMVar
                        Control.Monad.Class.MonadSay
                        Control.Monad.Class.MonadST
                        Control.Monad.Class.MonadSTM
@@ -66,6 +69,7 @@
                        Control.Monad.Class.MonadTimer
                        Control.Monad.Class.MonadTest
   default-language:    Haskell2010
+  default-extensions:  ImportQualifiedPost
   other-extensions:    CPP
                        DataKinds
                        DefaultSignatures
diff --git a/src/Control/Concurrent/Class/MonadMVar.hs b/src/Control/Concurrent/Class/MonadMVar.hs
--- a/src/Control/Concurrent/Class/MonadMVar.hs
+++ b/src/Control/Concurrent/Class/MonadMVar.hs
@@ -8,13 +8,13 @@
   , MonadInspectMVar (..)
   ) where
 
-import qualified Control.Concurrent.MVar as IO
-import           Control.Monad.Class.MonadThrow
+import Control.Concurrent.MVar qualified as IO
+import Control.Monad.Class.MonadThrow
 
-import           Control.Monad.Reader (ReaderT (..))
-import           Control.Monad.Trans (lift)
+import Control.Monad.Reader (ReaderT (..))
+import Control.Monad.Trans (lift)
 
-import           Data.Kind (Type)
+import Data.Kind (Type)
 
 
 class Monad m => MonadMVar m where
diff --git a/src/Control/Concurrent/Class/MonadSTM.hs b/src/Control/Concurrent/Class/MonadSTM.hs
--- a/src/Control/Concurrent/Class/MonadSTM.hs
+++ b/src/Control/Concurrent/Class/MonadSTM.hs
@@ -4,11 +4,11 @@
   (module STM)
   where
 
-import           Control.Monad.Class.MonadSTM              as STM
-import           Control.Concurrent.Class.MonadSTM.TVar    as STM
-import           Control.Concurrent.Class.MonadSTM.TMVar   as STM
-import           Control.Concurrent.Class.MonadSTM.TChan   as STM
-import           Control.Concurrent.Class.MonadSTM.TQueue  as STM
-import           Control.Concurrent.Class.MonadSTM.TBQueue as STM
-import           Control.Concurrent.Class.MonadSTM.TArray  as STM
+import Control.Monad.Class.MonadSTM              as STM
+import Control.Concurrent.Class.MonadSTM.TVar    as STM
+import Control.Concurrent.Class.MonadSTM.TMVar   as STM
+import Control.Concurrent.Class.MonadSTM.TChan   as STM
+import Control.Concurrent.Class.MonadSTM.TQueue  as STM
+import Control.Concurrent.Class.MonadSTM.TBQueue as STM
+import Control.Concurrent.Class.MonadSTM.TArray  as STM
 
diff --git a/src/Control/Concurrent/Class/MonadSTM/TArray.hs b/src/Control/Concurrent/Class/MonadSTM/TArray.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TArray.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TArray.hs
@@ -4,4 +4,4 @@
 --
 module Control.Concurrent.Class.MonadSTM.TArray (type TArray) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Concurrent/Class/MonadSTM/TBQueue.hs b/src/Control/Concurrent/Class/MonadSTM/TBQueue.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TBQueue.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TBQueue.hs
@@ -25,4 +25,4 @@
   , traceTBQueueIO
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Concurrent/Class/MonadSTM/TChan.hs b/src/Control/Concurrent/Class/MonadSTM/TChan.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TChan.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TChan.hs
@@ -23,4 +23,4 @@
   , isEmptyTChan
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Concurrent/Class/MonadSTM/TMVar.hs b/src/Control/Concurrent/Class/MonadSTM/TMVar.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TMVar.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TMVar.hs
@@ -25,4 +25,4 @@
   , traceTMVarIO
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Concurrent/Class/MonadSTM/TQueue.hs b/src/Control/Concurrent/Class/MonadSTM/TQueue.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TQueue.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TQueue.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE ExplicitNamespaces #-}
 
--- | This module corresponds to `Control.Concurrnet.STM.TVar` in "stm" package
+-- | This module corresponds to `Control.Concurrent.STM.TQueue` in "stm" package
 --
 module Control.Concurrent.Class.MonadSTM.TQueue
   ( -- * MonadSTM
@@ -23,4 +23,4 @@
   , traceTQueueIO
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Concurrent/Class/MonadSTM/TSem.hs b/src/Control/Concurrent/Class/MonadSTM/TSem.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TSem.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TSem.hs
@@ -17,4 +17,4 @@
   , traceTSemIO
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Concurrent/Class/MonadSTM/TVar.hs b/src/Control/Concurrent/Class/MonadSTM/TVar.hs
--- a/src/Control/Concurrent/Class/MonadSTM/TVar.hs
+++ b/src/Control/Concurrent/Class/MonadSTM/TVar.hs
@@ -23,4 +23,4 @@
   , traceTVarIO
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
diff --git a/src/Control/Monad/Class/MonadAsync.hs b/src/Control/Monad/Class/MonadAsync.hs
--- a/src/Control/Monad/Class/MonadAsync.hs
+++ b/src/Control/Monad/Class/MonadAsync.hs
@@ -10,6 +10,10 @@
 {-# LANGUAGE TypeFamilyDependencies #-}
 -- MonadAsync's ReaderT instance is undecidable.
 {-# LANGUAGE UndecidableInstances   #-}
+
+-- | <https://hackage.haskell.org/package/async async> API compatible with both
+-- 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.
+--
 module Control.Monad.Class.MonadAsync
   ( MonadAsync (..)
   , AsyncCancelled (..)
@@ -27,30 +31,30 @@
   , Concurrently (..)
   ) where
 
-import           Prelude hiding (read)
+import Prelude hiding (read)
 
 #if MIN_VERSION_base(4,18,0)
-import           Control.Applicative (Alternative (..))
+import Control.Applicative (Alternative (..))
 #else
-import           Control.Applicative (Alternative (..), liftA2)
+import Control.Applicative (Alternative (..), liftA2)
 #endif
-import           Control.Monad (forever)
-import           Control.Monad.Class.MonadFork
-import           Control.Monad.Class.MonadSTM
-import           Control.Monad.Class.MonadThrow
-import           Control.Monad.Class.MonadTimer
+import Control.Monad (forever)
+import Control.Monad.Class.MonadFork
+import Control.Monad.Class.MonadSTM
+import Control.Monad.Class.MonadThrow
+import Control.Monad.Class.MonadTimer
 
-import           Control.Monad.Reader (ReaderT (..))
-import           Control.Monad.Trans (lift)
+import Control.Monad.Reader (ReaderT (..))
+import Control.Monad.Trans (lift)
 
-import           Control.Concurrent.Async (AsyncCancelled (..))
-import qualified Control.Concurrent.Async as Async
-import qualified Control.Exception as E
+import Control.Concurrent.Async (AsyncCancelled (..))
+import Control.Concurrent.Async qualified as Async
+import Control.Exception qualified as E
 
-import           Data.Bifunctor (first)
-import           Data.Foldable (fold)
-import           Data.Functor (void)
-import           Data.Kind (Type)
+import Data.Bifunctor (first)
+import Data.Foldable (fold)
+import Data.Functor (void)
+import Data.Kind (Type)
 
 class ( MonadSTM m
       , MonadThread m
diff --git a/src/Control/Monad/Class/MonadEventlog.hs b/src/Control/Monad/Class/MonadEventlog.hs
--- a/src/Control/Monad/Class/MonadEventlog.hs
+++ b/src/Control/Monad/Class/MonadEventlog.hs
@@ -1,10 +1,8 @@
-module Control.Monad.Class.MonadEventlog
-  ( MonadEventlog (..)
-  ) where
+module Control.Monad.Class.MonadEventlog (MonadEventlog (..)) where
 
-import           Control.Monad.Reader
+import Control.Monad.Reader
 
-import qualified Debug.Trace as IO (traceEventIO, traceMarkerIO)
+import Debug.Trace qualified as IO (traceEventIO, traceMarkerIO)
 
 class Monad m => MonadEventlog m where
 
diff --git a/src/Control/Monad/Class/MonadFork.hs b/src/Control/Monad/Class/MonadFork.hs
--- a/src/Control/Monad/Class/MonadFork.hs
+++ b/src/Control/Monad/Class/MonadFork.hs
@@ -3,17 +3,22 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies        #-}
 
+-- | A generalisation of
+-- <https://hackage.haskell.org/package/base/docs/Control-Concurrent.html Control.Concurrent>
+-- API to both 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.
+--
 module Control.Monad.Class.MonadFork
   ( MonadThread (..)
   , labelThisThread
   , MonadFork (..)
   ) where
 
-import qualified Control.Concurrent as IO
-import           Control.Exception (AsyncException (ThreadKilled), Exception, SomeException)
-import           Control.Monad.Reader (ReaderT (..), lift)
-import           Data.Kind (Type)
-import qualified GHC.Conc.Sync as IO (labelThread)
+import Control.Concurrent qualified as IO
+import Control.Exception (AsyncException (ThreadKilled), Exception,
+           SomeException)
+import Control.Monad.Reader (ReaderT (..), lift)
+import Data.Kind (Type)
+import GHC.Conc.Sync qualified as IO (labelThread)
 
 
 class (Monad m, Eq   (ThreadId m),
diff --git a/src/Control/Monad/Class/MonadMVar.hs b/src/Control/Monad/Class/MonadMVar.hs
deleted file mode 100644
--- a/src/Control/Monad/Class/MonadMVar.hs
+++ /dev/null
@@ -1,3 +0,0 @@
-module Control.Monad.Class.MonadMVar {-# DEPRECATED "Use Control.Concurrent.Class.MonadMVar" #-} (module X) where
-
-import Control.Concurrent.Class.MonadMVar as X
diff --git a/src/Control/Monad/Class/MonadST.hs b/src/Control/Monad/Class/MonadST.hs
--- a/src/Control/Monad/Class/MonadST.hs
+++ b/src/Control/Monad/Class/MonadST.hs
@@ -1,9 +1,9 @@
 {-# LANGUAGE RankNTypes #-}
 module Control.Monad.Class.MonadST (MonadST (..)) where
 
-import           Control.Monad.Reader
+import Control.Monad.Reader
 
-import           Control.Monad.ST (ST, stToIO)
+import Control.Monad.ST (ST, stToIO)
 
 
 -- | This class is for abstracting over 'stToIO' which allows running 'ST'
diff --git a/src/Control/Monad/Class/MonadSTM.hs b/src/Control/Monad/Class/MonadSTM.hs
--- a/src/Control/Monad/Class/MonadSTM.hs
+++ b/src/Control/Monad/Class/MonadSTM.hs
@@ -1,15 +1,15 @@
 -- | This module corresponds to "Control.Monad.STM" in "stm" package
 --
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE DerivingStrategies         #-}
-{-# LANGUAGE FlexibleContexts           #-}
-{-# LANGUAGE GADTs                      #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE RankNTypes                 #-}
-{-# LANGUAGE ScopedTypeVariables        #-}
+{-# LANGUAGE DataKinds             #-}
+{-# LANGUAGE DerivingStrategies    #-}
+{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE GADTs                 #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE RankNTypes            #-}
+{-# LANGUAGE ScopedTypeVariables   #-}
 -- undecidable instances needed for 'WrappedSTM' instances of 'MonadThrow' and
 -- 'MonadCatch' type classes.
-{-# LANGUAGE UndecidableInstances       #-}
+{-# LANGUAGE UndecidableInstances  #-}
 module Control.Monad.Class.MonadSTM
   ( MonadSTM (STM, atomically, retry, orElse, check)
   , throwSTM
@@ -22,7 +22,7 @@
   , MonadInspectSTM (..)
   ) where
 
-import           Control.Monad.Class.MonadSTM.Internal
+import Control.Monad.Class.MonadSTM.Internal
 
 -- $non-standard-extensions
 --
diff --git a/src/Control/Monad/Class/MonadSTM/Internal.hs b/src/Control/Monad/Class/MonadSTM/Internal.hs
--- a/src/Control/Monad/Class/MonadSTM/Internal.hs
+++ b/src/Control/Monad/Class/MonadSTM/Internal.hs
@@ -48,7 +48,7 @@
   , isEmptyTMVarDefault
   , labelTMVarDefault
   , traceTMVarDefault
-    -- ** Default 'TBQueue' implementation
+    -- ** Default 'TQueue' implementation
   , TQueueDefault (..)
   , newTQueueDefault
   , writeTQueueDefault
@@ -99,35 +99,35 @@
   , labelTChanDefault
   ) where
 
-import           Prelude hiding (read)
+import Prelude hiding (read)
 
-import qualified Control.Concurrent.STM.TArray as STM
-import qualified Control.Concurrent.STM.TBQueue as STM
-import qualified Control.Concurrent.STM.TChan as STM
-import qualified Control.Concurrent.STM.TMVar as STM
-import qualified Control.Concurrent.STM.TQueue as STM
-import qualified Control.Concurrent.STM.TSem as STM
-import qualified Control.Concurrent.STM.TVar as STM
-import           Control.Monad (unless, when)
-import qualified Control.Monad.STM as STM
+import Control.Concurrent.STM.TArray qualified as STM
+import Control.Concurrent.STM.TBQueue qualified as STM
+import Control.Concurrent.STM.TChan qualified as STM
+import Control.Concurrent.STM.TMVar qualified as STM
+import Control.Concurrent.STM.TQueue qualified as STM
+import Control.Concurrent.STM.TSem qualified as STM
+import Control.Concurrent.STM.TVar qualified as STM
+import Control.Monad (unless, when)
+import Control.Monad.STM qualified as STM
 
-import           Control.Monad.Reader (ReaderT (..))
-import           Control.Monad.Trans (lift)
+import Control.Monad.Reader (ReaderT (..))
+import Control.Monad.Trans (lift)
 
-import qualified Control.Monad.Class.MonadThrow as MonadThrow
+import Control.Monad.Class.MonadThrow qualified as MonadThrow
 
-import           Control.Exception
-import           Data.Array (Array, bounds)
-import qualified Data.Array as Array
-import           Data.Array.Base (IArray (numElements), MArray (..),
-                     arrEleBottom, listArray, unsafeAt)
-import           Data.Foldable (traverse_)
-import           Data.Ix (Ix, rangeSize)
-import           Data.Kind (Type)
-import           Data.Proxy (Proxy (..))
-import           Data.Typeable (Typeable)
-import           GHC.Stack
-import           Numeric.Natural (Natural)
+import Control.Exception
+import Data.Array (Array, bounds)
+import Data.Array qualified as Array
+import Data.Array.Base (IArray (numElements), MArray (..), arrEleBottom,
+           listArray, unsafeAt)
+import Data.Foldable (traverse_)
+import Data.Ix (Ix, rangeSize)
+import Data.Kind (Type)
+import Data.Proxy (Proxy (..))
+import Data.Typeable (Typeable)
+import GHC.Stack
+import Numeric.Natural (Natural)
 
 
 -- $default-implementations
@@ -436,7 +436,7 @@
   -- This is supported by 'IOSim' (and 'IOSimPOR'); 'IO' has a trivial instance.
   --
   -- The simplest example is:
-  -- 
+  --
   -- >
   -- > traceTVar (Proxy @m) tvar (\_ -> TraceString . show)
   -- >
diff --git a/src/Control/Monad/Class/MonadSay.hs b/src/Control/Monad/Class/MonadSay.hs
--- a/src/Control/Monad/Class/MonadSay.hs
+++ b/src/Control/Monad/Class/MonadSay.hs
@@ -1,7 +1,7 @@
 module Control.Monad.Class.MonadSay where
 
-import           Control.Monad.Reader
-import qualified Data.ByteString.Char8 as BSC
+import Control.Monad.Reader
+import Data.ByteString.Char8 qualified as BSC
 
 class Monad m => MonadSay m where
   say :: String -> m ()
diff --git a/src/Control/Monad/Class/MonadTest.hs b/src/Control/Monad/Class/MonadTest.hs
--- a/src/Control/Monad/Class/MonadTest.hs
+++ b/src/Control/Monad/Class/MonadTest.hs
@@ -1,10 +1,10 @@
 module Control.Monad.Class.MonadTest (MonadTest (..)) where
 
-import           Control.Monad.Reader
+import Control.Monad.Reader
 
 -- | A helper monad for /IOSimPOR/.
 class Monad m => MonadTest m where
-  -- | mark a thread for schedule exploration.  All threads that are forked by
+  -- | Mark a thread for schedule exploration.  All threads that are forked by
   -- it are also included in the exploration.
   --
   exploreRaces :: m ()
diff --git a/src/Control/Monad/Class/MonadThrow.hs b/src/Control/Monad/Class/MonadThrow.hs
--- a/src/Control/Monad/Class/MonadThrow.hs
+++ b/src/Control/Monad/Class/MonadThrow.hs
@@ -7,6 +7,10 @@
 {-# LANGUAGE TupleSections             #-}
 {-# LANGUAGE TypeFamilies              #-}
 
+-- | A generalisation of
+-- <https://hackage.haskell.org/package/base/docs/Control-Exception.html Control.Exception>
+-- API to both 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.
+--
 module Control.Monad.Class.MonadThrow
   ( MonadThrow (..)
   , MonadCatch (..)
@@ -21,14 +25,14 @@
   , catches
   ) where
 
-import           Control.Exception (Exception (..), MaskingState, SomeException)
-import qualified Control.Exception as IO
-import           Control.Monad (liftM)
+import Control.Exception (Exception (..), MaskingState, SomeException)
+import Control.Exception qualified as IO
+import Control.Monad (liftM)
 
-import           Control.Monad.Reader (ReaderT (..), runReaderT, lift)
+import Control.Monad.Reader (ReaderT (..), lift, runReaderT)
 
-import           Control.Monad.STM (STM)
-import qualified Control.Monad.STM as STM
+import Control.Monad.STM (STM)
+import Control.Monad.STM qualified as STM
 
 -- | Throwing exceptions, and resource handling in the presence of exceptions.
 --
diff --git a/src/Control/Monad/Class/MonadTime.hs b/src/Control/Monad/Class/MonadTime.hs
--- a/src/Control/Monad/Class/MonadTime.hs
+++ b/src/Control/Monad/Class/MonadTime.hs
@@ -1,5 +1,9 @@
 {-# LANGUAGE DeriveGeneric #-}
 
+-- | <https://hackage.haskell.org/package/time time> and
+-- <https://hackage.haskell.org/package/base base> time API compatible with both
+-- 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.
+--
 module Control.Monad.Class.MonadTime
   ( MonadTime (..)
   , MonadMonotonicTimeNSec (..)
@@ -10,13 +14,12 @@
   , NominalDiffTime
   ) where
 
-import           Control.Monad.Reader
+import Control.Monad.Reader
 
-import           Data.Time.Clock (NominalDiffTime, UTCTime,
-                     addUTCTime, diffUTCTime)
-import qualified Data.Time.Clock as Time
-import           Data.Word (Word64)
-import qualified GHC.Clock as IO (getMonotonicTimeNSec)
+import Data.Time.Clock (NominalDiffTime, UTCTime, addUTCTime, diffUTCTime)
+import Data.Time.Clock qualified as Time
+import Data.Word (Word64)
+import GHC.Clock qualified as IO (getMonotonicTimeNSec)
 
 
 class Monad m => MonadMonotonicTimeNSec m where
diff --git a/src/Control/Monad/Class/MonadTimer.hs b/src/Control/Monad/Class/MonadTimer.hs
--- a/src/Control/Monad/Class/MonadTimer.hs
+++ b/src/Control/Monad/Class/MonadTimer.hs
@@ -4,20 +4,23 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies        #-}
 
--- | Provides classes to handle delays and timeouts.
+-- | Provides classes to handle delays and timeouts which generalised
+-- <https://hackage.haskell.org/package/base base> API to both 'IO' and
+-- <https://hackage.haskell.org/package/io-sim IOSim>.
+--
 module Control.Monad.Class.MonadTimer
   ( MonadDelay (..)
   , MonadTimer (..)
   ) where
 
-import qualified Control.Concurrent as IO
-import           Control.Concurrent.Class.MonadSTM
-import qualified Control.Concurrent.STM.TVar as STM
+import Control.Concurrent qualified as IO
+import Control.Concurrent.Class.MonadSTM
+import Control.Concurrent.STM.TVar qualified as STM
 
-import           Control.Monad.Reader (ReaderT (..))
-import           Control.Monad.Trans (lift)
+import Control.Monad.Reader (ReaderT (..))
+import Control.Monad.Trans (lift)
 
-import qualified System.Timeout as IO
+import System.Timeout qualified as IO
 
 -- | A typeclass to delay current thread.
 class Monad m => MonadDelay m where
