diff --git a/src/Data/Function/Step.hs b/src/Data/Function/Step.hs
--- a/src/Data/Function/Step.hs
+++ b/src/Data/Function/Step.hs
@@ -42,17 +42,27 @@
     putSF,
     ) where
 
-import Control.Applicative  (liftA2)
+import Control.Applicative  (Applicative (pure, (<*>)), liftA2, (<$>))
 import Control.DeepSeq      (NFData (..))
 import Control.Monad        (ap)
 import Data.Functor.Classes
 import Data.List            (intercalate)
 import Data.Map             (Map)
-import Prelude ()
-import Prelude.Compat
 
+import Prelude
+       (Eq (..), Functor, IO, Maybe (..), Monad (..), Ord (..), Ordering (..),
+       Show (..), String, fst, length, map, otherwise, putStrLn, replicate,
+       uncurry, ($), (++), (-), (.))
+
+import Data.Foldable    (Foldable, foldr, maximum)
+import Data.Monoid      (Monoid (..))
+import Data.Semigroup   (Semigroup (..))
+import Data.Traversable (Traversable (traverse))
+
 #ifdef LIFTED_FUNCTOR_CLASSES
 import Text.Show (showListWith)
+#else
+import Prelude (showChar, showParen, showString)
 #endif
 
 import qualified Data.Map        as Map
@@ -97,7 +107,7 @@
 -- Following property holds, i.e. 'SF' and ordinary function 'Applicative' instances
 -- are compatible (and '!' is a homomorphism).
 --
--- prop> liftA2 f g h ! x == liftA2 f (g !) (h !) x
+-- prop> liftA2 (applyFun2 f) g h ! x == liftA2 (applyFun2 f :: A -> B -> C) (g !) (h !) (x :: Int)
 --
 -- Recall that for ordinary functions @'liftA2' f g h x = f (g x) (h x)@.
 --
@@ -369,6 +379,11 @@
 putSF = putStrLn . showSF
 
 -- $setup
+--
+-- >>> import Test.QuickCheck (applyFun2)
+-- >>> import Test.QuickCheck.Poly (A, B, C)
+-- >>> import Control.Applicative (liftA2, pure)
+-- >>> import Data.Semigroup (Semigroup (..))
 --
 -- == Examples
 --
diff --git a/src/Data/Function/Step/Discrete/Closed.hs b/src/Data/Function/Step/Discrete/Closed.hs
--- a/src/Data/Function/Step/Discrete/Closed.hs
+++ b/src/Data/Function/Step/Discrete/Closed.hs
@@ -44,18 +44,28 @@
     putSF,
     ) where
 
-import Control.Applicative   (liftA2)
-import Control.DeepSeq       (NFData (..))
-import Control.Monad         (ap)
-import Data.Maybe (mapMaybe)
+import Control.Applicative  (Applicative (pure, (<*>)), liftA2, (<$>))
+import Control.DeepSeq      (NFData (..))
+import Control.Monad        (ap)
 import Data.Functor.Classes
-import Data.List             (intercalate)
-import Data.Map              (Map)
-import Prelude ()
-import Prelude.Compat
+import Data.List            (intercalate)
+import Data.Map             (Map)
+import Data.Maybe           (mapMaybe)
 
+import Prelude
+       (Eq (..), Functor (fmap), IO, Maybe (..), Monad (..), Ord (..),
+       Show (..), String, fst, id, length, map, min, otherwise, putStrLn,
+       replicate, uncurry, ($), (++), (-), (.))
+
+import Data.Foldable    (Foldable, foldr, maximum)
+import Data.Monoid      (Monoid (..))
+import Data.Semigroup   (Semigroup (..))
+import Data.Traversable (Traversable)
+
 #ifdef LIFTED_FUNCTOR_CLASSES
 import Text.Show (showListWith)
+#else
+import Prelude (showChar, showParen, showString)
 #endif
 
 import qualified Data.Function.Step as SF
@@ -341,6 +351,10 @@
 putSF = putStrLn . showSF
 
 -- $setup
+--
+-- >>> import Control.Applicative (liftA2, pure)
+-- >>> import qualified Data.Function.Step as SF
+-- >>> import Data.Semigroup (Semigroup (..))
 --
 -- == Examples
 --
diff --git a/src/Data/Function/Step/Discrete/Open.hs b/src/Data/Function/Step/Discrete/Open.hs
--- a/src/Data/Function/Step/Discrete/Open.hs
+++ b/src/Data/Function/Step/Discrete/Open.hs
@@ -44,18 +44,28 @@
     putSF,
     ) where
 
-import Control.Applicative  (liftA2)
+import Control.Applicative  (Applicative (pure, (<*>)), liftA2, (<$>))
 import Control.DeepSeq      (NFData (..))
 import Control.Monad        (ap)
 import Data.Functor.Classes
 import Data.List            (intercalate)
 import Data.Map             (Map)
 import Data.Maybe           (mapMaybe)
-import Prelude ()
-import Prelude.Compat
 
+import Prelude
+       (Eq (..), Functor (fmap), IO, Maybe (..), Monad (..), Ord (..),
+       Show (..), String, fst, id, length, map, min, otherwise, putStrLn,
+       replicate, uncurry, ($), (++), (-), (.))
+
+import Data.Foldable    (Foldable, foldr, maximum)
+import Data.Monoid      (Monoid (..))
+import Data.Semigroup   (Semigroup (..))
+import Data.Traversable (Traversable)
+
 #ifdef LIFTED_FUNCTOR_CLASSES
 import Text.Show (showListWith)
+#else
+import Prelude (showChar, showParen, showString)
 #endif
 
 import qualified Data.Function.Step as SF
@@ -340,6 +350,10 @@
 putSF = putStrLn . showSF
 
 -- $setup
+--
+-- >>> import Control.Applicative (liftA2, pure)
+-- >>> import qualified Data.Function.Step as SF
+-- >>> import Data.Semigroup (Semigroup (..))
 --
 -- == Examples
 --
diff --git a/step-function.cabal b/step-function.cabal
--- a/step-function.cabal
+++ b/step-function.cabal
@@ -1,36 +1,44 @@
-cabal-version:  >= 1.10
-name:           step-function
-version:        0.2
-
-synopsis:       Staircase functions or piecewise constant functions
-category:       Text
+cabal-version:      >=1.10
+name:               step-function
+version:            0.2.0.1
+synopsis:           Staircase functions or piecewise constant functions
+category:           Text
 description:
   Step functions, staircase functions or piecewise constant functions.
   Implemented as a default value and a series of transitions.
   Supports merging two step functions using a supplied merging function.
   .
 
-homepage:       https://github.com/jonpetterbergman/step-function
-bug-reports:    https://github.com/jonpetterbergman/stepfunction/issues
-author:         Oleg Grenrus <oleg.grenrus@iki.fi>, Petter Bergman <jon.petter.bergman@gmail.com>
-maintainer:     Oleg Grenrus <oleg.grenrus@iki.fi>
-license:        BSD3
-license-file:   LICENSE
-build-type:     Simple
+homepage:           https://github.com/jonpetterbergman/step-function
+bug-reports:        https://github.com/jonpetterbergman/stepfunction/issues
+author:
+  Oleg Grenrus <oleg.grenrus@iki.fi>, Petter Bergman <jon.petter.bergman@gmail.com>
+
+maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
+license:            BSD3
+license-file:       LICENSE
+build-type:         Simple
 extra-source-files:
-  README.md
   Changelog.md
+  README.md
 
 tested-with:
-  GHC==7.6.3
-  GHC==7.8.4
-  GHC==7.10.3
-  GHC==8.0.2
-  GHC==8.2.2
-  GHC==8.4.2
+  GHC ==7.6.3
+   || ==7.8.4
+   || ==7.10.3
+   || ==8.0.2
+   || ==8.2.2
+   || ==8.4.4
+   || ==8.6.5
+   || ==8.8.4
+   || ==8.10.7
+   || ==9.0.2
+   || ==9.2.7
+   || ==9.4.4
+   || ==9.6.1
 
 source-repository head
-  type: git
+  type:     git
   location: https://github.com/jonpetterbergman/step-function
 
 library
@@ -38,41 +46,45 @@
   ghc-options:      -Wall
   hs-source-dirs:   src
   build-depends:
-    base                  >=4.6     && <4.12,
-    base-compat-batteries >=0.10.1  && <0.11,
-    deepseq               >=1.3.0.1 && <1.5,
-    containers            >=0.5.0.0 && <0.6,
-    QuickCheck            >=2.11.3  && <2.12
+      base        >=4.6     && <4.19
+    , containers  >=0.5.0.0 && <0.7
+    , deepseq     >=1.3.0.1 && <1.5
+    , QuickCheck  >=2.11.3  && <2.15
 
-  if !impl(ghc >= 8.0)
+  if !impl(ghc >=8.0)
+    build-depends: semigroups >=0.18.4 && <0.20
+
+  if !impl(ghc >=8.0)
     -- We enforce the fact that with GHC-7.10
     -- we have at least transformers-0.4.2.0 (the bundled one)
     -- which has 'Data.Functor.Classes' module. (transformers-0.3 doesn't have)
-    if impl(ghc >= 7.10)
-      build-depends:
-        transformers         >=0.4.2.0 && <0.6
+    if impl(ghc >=7.10)
+      build-depends: transformers >=0.4.2.0 && <0.7
+
     else
       build-depends:
-        transformers         >=0.3.0.0 && <0.6,
-        transformers-compat  >=0.6.2   && <0.7
+          transformers         >=0.3.0.0 && <0.7
+        , transformers-compat  >=0.6.2   && <0.8
 
   other-extensions:
-    DeriveFunctor
     DeriveFoldable
+    DeriveFunctor
     DeriveTraversable
     OverloadedStrings
+
   exposed-modules:
     Data.Function.Step
     Data.Function.Step.Discrete
-    Data.Function.Step.Discrete.Open
     Data.Function.Step.Discrete.Closed
+    Data.Function.Step.Discrete.Open
 
 test-suite merge
-  type:                exitcode-stdio-1.0
-  main-is:             Merge.hs
+  type:             exitcode-stdio-1.0
+  main-is:          Merge.hs
   build-depends:
-    base,
-    step-function,
-    QuickCheck
-  hs-source-dirs:      test
-  default-language:    Haskell2010
+      base
+    , QuickCheck
+    , step-function
+
+  hs-source-dirs:   test
+  default-language: Haskell2010
