diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+1.1.0.1
+=======
+
+* Backwards compatibility with GHC 7.8
+
 1.1.0.0
 =======
 
diff --git a/hip.cabal b/hip.cabal
--- a/hip.cabal
+++ b/hip.cabal
@@ -1,5 +1,5 @@
 Name:              hip
-Version:           1.1.0.0
+Version:           1.1.0.1
 License:           BSD3
 License-File:      LICENSE
 Author:            Alexey Kuleshevich
diff --git a/src/Graphics/Image.hs b/src/Graphics/Image.hs
--- a/src/Graphics/Image.hs
+++ b/src/Graphics/Image.hs
@@ -107,6 +107,7 @@
 import Prelude hiding (map, zipWith, sum, product, maximum, minimum, traverse)
 #else
 import Prelude hiding (map, zipWith, sum, product, maximum, minimum)
+import Control.Applicative (pure)
 #endif
 import qualified Data.Foldable as F
 import Graphics.Image.ColorSpace
diff --git a/src/Graphics/Image/ColorSpace/Complex.hs b/src/Graphics/Image/ColorSpace/Complex.hs
--- a/src/Graphics/Image/ColorSpace/Complex.hs
+++ b/src/Graphics/Image/ColorSpace/Complex.hs
@@ -1,4 +1,8 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 800
+  {-# OPTIONS_GHC -Wno-redundant-constraints #-}
+#endif
 -- |
 -- Module      : Graphics.Image.ColorSpace.Complex
 -- Copyright   : (c) Alexey Kuleshevich 2016
@@ -34,12 +38,12 @@
 {-# INLINE (+:) #-}
 
 -- | Extracts the real part of a complex pixel.
-realPart :: ColorSpace cs => Pixel cs (Complex e) -> Pixel cs e
+realPart :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
 realPart = liftA C.realPart
 {-# INLINE realPart #-}
 
 -- | Extracts the imaginary part of a complex pixel.
-imagPart :: ColorSpace cs => Pixel cs (Complex e) -> Pixel cs e
+imagPart :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
 imagPart = liftA C.imagPart
 {-# INLINE imagPart #-}
 
diff --git a/src/Graphics/Image/IO.hs b/src/Graphics/Image/IO.hs
--- a/src/Graphics/Image/IO.hs
+++ b/src/Graphics/Image/IO.hs
@@ -165,7 +165,7 @@
                   -> IO ()
 displayImageUsing viewer block img = do
   let display = do
-        tmpDir <- (</> "hip") <$> getTemporaryDirectory
+        tmpDir <- fmap (</> "hip") getTemporaryDirectory
         createDirectoryIfMissing True tmpDir
         bracket (openBinaryTempFile tmpDir "tmp-img.tiff")
           (hClose . snd)
diff --git a/src/Graphics/Image/IO/Histogram.hs b/src/Graphics/Image/IO/Histogram.hs
--- a/src/Graphics/Image/IO/Histogram.hs
+++ b/src/Graphics/Image/IO/Histogram.hs
@@ -102,7 +102,7 @@
 displayHistogramsUsing viewer block hists = do
   let display = do
         tmpDir <- getTemporaryDirectory
-        histPath <- (</> "tmp-hist.svg") <$> createTempDirectory tmpDir "hip-histogram"
+        histPath <- fmap (</> "tmp-hist.svg") $ createTempDirectory tmpDir "hip-histogram"
         writeHistograms histPath hists
         displayImageFile viewer histPath
   if block
diff --git a/src/Graphics/Image/Interface.hs b/src/Graphics/Image/Interface.hs
--- a/src/Graphics/Image/Interface.hs
+++ b/src/Graphics/Image/Interface.hs
@@ -8,7 +8,7 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE UndecidableInstances #-}
 #if __GLASGOW_HASKELL__ >= 800
-    {-# OPTIONS_GHC -Wno-redundant-constraints #-}
+  {-# OPTIONS_GHC -Wno-redundant-constraints #-}
   {-# LANGUAGE UndecidableSuperClasses #-}
 #endif
 {-# LANGUAGE ViewPatterns #-}
diff --git a/src/Graphics/Image/Interface/Vector/Unboxed.hs b/src/Graphics/Image/Interface/Vector/Unboxed.hs
--- a/src/Graphics/Image/Interface/Vector/Unboxed.hs
+++ b/src/Graphics/Image/Interface/Vector/Unboxed.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
@@ -22,7 +23,11 @@
 import Prelude hiding (map, zipWith)
 import qualified Prelude as P (map)
 import Control.DeepSeq (deepseq)
+#if MIN_VERSION_base(4,8,0)
 import Control.Monad (void)
+#else
+import Data.Functor
+#endif
 import Data.Typeable (Typeable)
 import Data.Vector.Unboxed (Vector, Unbox)
 import qualified Data.Vector.Unboxed as V
diff --git a/src/Graphics/Image/Processing/Binary.hs b/src/Graphics/Image/Processing/Binary.hs
--- a/src/Graphics/Image/Processing/Binary.hs
+++ b/src/Graphics/Image/Processing/Binary.hs
@@ -29,6 +29,9 @@
   ) where
 
 import Prelude hiding (map, zipWith)
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative ((<*>))
+#endif
 import Graphics.Image.Interface
 import Graphics.Image.ColorSpace
 import Graphics.Image.Processing.Convolution
diff --git a/src/Graphics/Image/Processing/Complex.hs b/src/Graphics/Image/Processing/Complex.hs
--- a/src/Graphics/Image/Processing/Complex.hs
+++ b/src/Graphics/Image/Processing/Complex.hs
@@ -43,13 +43,13 @@
 {-# INLINE (!+!) #-}
 
 -- | Extracts the real part of a complex image.
-realPart' :: (Array arr cs e, Array arr cs (Complex e)) =>
+realPart' :: (Array arr cs e, Array arr cs (Complex e), RealFloat e) =>
              Image arr cs (Complex e) -> Image arr cs e
 realPart' = map realPart
 {-# INLINE realPart' #-}
 
 -- | Extracts the imaginary part of a complex image.
-imagPart' :: (Array arr cs e, Array arr cs (Complex e)) =>
+imagPart' :: (Array arr cs e, Array arr cs (Complex e), RealFloat e) =>
              Image arr cs (Complex e) -> Image arr cs e
 imagPart' = map imagPart
 {-# INLINE imagPart' #-}
