diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 Changes
 =======
 
+Version 1.4.0.2
+---------------
+
+Automatically disable the dependency on the `clock` package when compiled by ghcjs.
+
 Version 1.4.0.1
 ---------------
 
diff --git a/Test/Tasty/CmdLine.hs b/Test/Tasty/CmdLine.hs
--- a/Test/Tasty/CmdLine.hs
+++ b/Test/Tasty/CmdLine.hs
@@ -11,7 +11,7 @@
 import Control.Monad
 import Data.Maybe
 import Data.Proxy
-import Data.Typeable (typeOf1)
+import Data.Typeable (typeRep)
 import Options.Applicative
 import Options.Applicative.Common (evalParser)
 import qualified Options.Applicative.Types as Applicative (Option(..))
@@ -20,9 +20,8 @@
 import System.Exit
 import System.IO
 #if !MIN_VERSION_base(4,11,0)
+import Data.Monoid
 import Data.Foldable (foldMap)
-import Data.Monoid (mempty)
-import Data.Semigroup (Semigroup((<>)))
 #endif
 
 import Test.Tasty.Core
@@ -97,7 +96,7 @@
 
     prov :: String
     prov = "WARNING (in the IsOption instance for "
-             ++ show (typeOf1 (Proxy :: Proxy v)) ++ "):"
+             ++ show (typeRep (Proxy :: Proxy v)) ++ "):"
 
 -- Replace an `optionCLParser`'s 'propShowDefault' with 'showDefaultValue' from
 -- the 'IsOption' class. It's tempting to try doing this when constructing the
diff --git a/Test/Tasty/Core.hs b/Test/Tasty/Core.hs
--- a/Test/Tasty/Core.hs
+++ b/Test/Tasty/Core.hs
@@ -1,11 +1,7 @@
 -- | Core types and definitions
 {-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleContexts,
              ExistentialQuantification, RankNTypes, DeriveDataTypeable, NoMonomorphismRestriction,
-             CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE DeriveGeneric #-}
-#endif
-
+             DeriveGeneric #-}
 module Test.Tasty.Core where
 
 import Control.Exception
@@ -16,10 +12,6 @@
 import Data.Foldable
 import qualified Data.Sequence as Seq
 import Data.Monoid
-#if !MIN_VERSION_base(4,11,0)
-import Data.Semigroup (Semigroup)
-import qualified Data.Semigroup (Semigroup((<>)))
-#endif
 import Data.Typeable
 import qualified Data.Map as Map
 import Data.Tagged
@@ -51,11 +43,7 @@
 data Outcome
   = Success -- ^ test succeeded
   | Failure FailureReason -- ^ test failed because of the 'FailureReason'
-#if __GLASGOW_HASKELL__ >= 702
   deriving (Show, Generic)
-#else
-  deriving (Show)
-#endif
 
 -- | Time in seconds. Used to measure how long the tests took to run.
 type Time = Double
diff --git a/Test/Tasty/Ingredients/ConsoleReporter.hs b/Test/Tasty/Ingredients/ConsoleReporter.hs
--- a/Test/Tasty/Ingredients/ConsoleReporter.hs
+++ b/Test/Tasty/Ingredients/ConsoleReporter.hs
@@ -46,8 +46,7 @@
 #endif
 import Data.Maybe
 import Data.Monoid (Any(..))
-import Data.Proxy (Proxy(..))
-import Data.Typeable (Typeable)
+import Data.Typeable
 import Options.Applicative hiding (action, str, Success, Failure)
 import System.IO
 import System.Console.ANSI
@@ -332,7 +331,7 @@
   | IntMap.null smap = return True
   | otherwise =
       join . atomically $
-        foldr (uncurry f) finish (IntMap.toAscList smap) mempty lookahead0
+        IntMap.foldrWithKey f finish smap mempty lookahead0
   where
     f :: Int
       -> TVar Status
diff --git a/Test/Tasty/Options.hs b/Test/Tasty/Options.hs
--- a/Test/Tasty/Options.hs
+++ b/Test/Tasty/Options.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, ScopedTypeVariables, DeriveDataTypeable,
+{-# LANGUAGE ScopedTypeVariables, DeriveDataTypeable,
              ExistentialQuantification, GADTs,
              FlexibleInstances, UndecidableInstances,
              TypeOperators #-}
@@ -37,12 +37,6 @@
 #if !MIN_VERSION_base(4,11,0)
 import Data.Semigroup (Semigroup)
 import qualified Data.Semigroup (Semigroup((<>)))
-#endif
-#if !MIN_VERSION_base(4,5,0)
-import Data.Semigroup (Semigroup((<>)))
-#endif
-#if !MIN_VERSION_base(4,4,0)
-import Data.Orphans ()
 #endif
 
 -- | An option is a data type that inhabits the `IsOption` type class.
diff --git a/Test/Tasty/Options/Core.hs b/Test/Tasty/Options/Core.hs
--- a/Test/Tasty/Options/Core.hs
+++ b/Test/Tasty/Options/Core.hs
@@ -16,10 +16,7 @@
 import Options.Applicative hiding (str)
 import GHC.Conc
 #if !MIN_VERSION_base(4,11,0)
-import Data.Semigroup (Semigroup((<>)))
-#endif
-#if !MIN_VERSION_base(4,4,0)
-import Data.Orphans ()
+import Data.Monoid
 #endif
 
 import Test.Tasty.Options
@@ -33,7 +30,7 @@
 -- reporters are handled already involves parallelism. Other ingredients
 -- may also choose to include this option.
 newtype NumThreads = NumThreads { getNumThreads :: Int }
-  deriving (Eq, Ord, Num, Show, Typeable)
+  deriving (Eq, Ord, Num, Typeable)
 instance IsOption NumThreads where
   defaultValue = NumThreads numCapabilities
   parseValue = mfilter onlyPositive . fmap NumThreads . safeRead
diff --git a/Test/Tasty/Patterns.hs b/Test/Tasty/Patterns.hs
--- a/Test/Tasty/Patterns.hs
+++ b/Test/Tasty/Patterns.hs
@@ -21,7 +21,7 @@
 import Data.Typeable
 import Options.Applicative hiding (Success)
 #if !MIN_VERSION_base(4,11,0)
-import Data.Semigroup (Semigroup((<>)))
+import Data.Monoid
 #endif
 
 newtype TestPattern = TestPattern (Maybe Expr)
diff --git a/Test/Tasty/Patterns/Parser.hs b/Test/Tasty/Patterns/Parser.hs
--- a/Test/Tasty/Patterns/Parser.hs
+++ b/Test/Tasty/Patterns/Parser.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 -- | See <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html> for the
 -- full awk grammar.
 module Test.Tasty.Patterns.Parser
@@ -20,9 +20,6 @@
 import Control.Monad
 import Test.Tasty.Patterns.Types
 import Test.Tasty.Patterns.Expr
-#if !MIN_VERSION_base(4,6,0)
-import Data.Orphans ()
-#endif
 
 type Token = ReadP
 
diff --git a/Test/Tasty/Runners/Utils.hs b/Test/Tasty/Runners/Utils.hs
--- a/Test/Tasty/Runners/Utils.hs
+++ b/Test/Tasty/Runners/Utils.hs
@@ -5,6 +5,7 @@
 
 import Control.Exception
 import Control.Applicative
+import Control.Concurrent (mkWeakThreadId, myThreadId)
 import Control.Monad (forM_)
 #ifndef VERSION_clock
 import Data.Time.Clock.POSIX (getPOSIXTime)
@@ -17,12 +18,10 @@
 import qualified System.Clock as Clock
 #endif
 
--- Install handlers only on UNIX and on GHC >= 7.6
--- because GHC 7.4 lacks mkWeakThreadId (see #181).
-#define INSTALL_HANDLERS defined VERSION_unix && MIN_VERSION_base(4,6,0)
+-- Install handlers only on UNIX
+#define INSTALL_HANDLERS defined VERSION_unix
 
 #if INSTALL_HANDLERS
-import Control.Concurrent (mkWeakThreadId, myThreadId)
 import System.Posix.Signals
 import System.Mem.Weak (deRefWeak)
 #endif
diff --git a/tasty.cabal b/tasty.cabal
--- a/tasty.cabal
+++ b/tasty.cabal
@@ -2,7 +2,7 @@
 --  see http://haskell.org/cabal/users-guide/
 
 name:                tasty
-version:             1.4.0.1
+version:             1.4.0.2
 synopsis:            Modern and extensible testing framework
 description:         Tasty is a modern testing framework for Haskell.
                      It lets you combine your unit tests, golden
@@ -65,7 +65,7 @@
     Test.Tasty.Ingredients.ListTests
     Test.Tasty.Ingredients.IncludingOptions
   build-depends:
-    base >= 4.3 && < 5,
+    base >= 4.7 && < 5,
     stm >= 2.3,
     containers,
     mtl >= 2.1.3.1,
@@ -75,15 +75,11 @@
     ansi-terminal >= 0.9
   if(!impl(ghc >= 8.0))
     build-depends: semigroups
-  if(!impl(ghc >= 7.6))
-    build-depends: base-orphans >= 0.8.4, ghc-prim
-  if(!impl(ghc >= 7.2))
-    build-depends: unbounded-delays < 0.1.0.10
 
-  if flag(clock)
+  if flag(clock) && !impl(ghcjs)
     build-depends: clock >= 0.4.4.0
   else
-    build-depends: time
+    build-depends: time >= 1.4
 
   if !os(windows) && !impl(ghcjs)
     build-depends: wcwidth
