diff --git a/massiv-io.cabal b/massiv-io.cabal
--- a/massiv-io.cabal
+++ b/massiv-io.cabal
@@ -1,5 +1,5 @@
 name:                massiv-io
-version:             0.1.5.0
+version:             0.1.6.0
 synopsis:            Import/export of Image files into massiv Arrays
 description:         This package contains functionality for import/export of arrays
                      into the real world. For now it only has the ability to read/write
diff --git a/src/Data/Massiv/Array/IO.hs b/src/Data/Massiv/Array/IO.hs
--- a/src/Data/Massiv/Array/IO.hs
+++ b/src/Data/Massiv/Array/IO.hs
@@ -1,11 +1,11 @@
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE GADTs                 #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeOperators         #-}
-{-# LANGUAGE TypeSynonymInstances  #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE TypeSynonymInstances #-}
 -- |
 -- Module      : Data.Massiv.Array.IO
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -15,7 +15,8 @@
 -- Portability : non-portable
 --
 module Data.Massiv.Array.IO
-  ( -- * Reading
+  ( -- $supported
+    -- * Reading
     readArray
   , readImage
   , readImageAuto
@@ -37,26 +38,23 @@
   -- * Supported Image Formats
   , module Data.Massiv.Array.IO.Base
   , module Data.Massiv.Array.IO.Image
-  -- $supported
   ) where
 
-import           Control.Concurrent         (forkIO)
-import           Control.Exception          (bracket)
-import           Control.Monad              (void)
-import qualified Data.ByteString            as B
-import qualified Data.ByteString.Lazy       as BL
-import           Data.Massiv.Array          as A
-import           Data.Massiv.Array.IO.Base  hiding (convertEither,
-                                             fromEitherDecode, fromMaybeEncode,
-                                             toProxy)
-import           Data.Massiv.Array.IO.Image
-import           Graphics.ColorSpace
-import           Prelude                    as P hiding (readFile, writeFile)
-import           System.Directory           (createDirectoryIfMissing,
-                                             getTemporaryDirectory)
-import           System.FilePath
-import           System.IO                  (hClose, openBinaryTempFile)
-import           System.Process             (readProcess)
+import Control.Concurrent (forkIO)
+import Control.Exception (bracket)
+import Control.Monad (void)
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as BL
+import Data.Massiv.Array as A
+import Data.Massiv.Array.IO.Base hiding (convertEither, fromEitherDecode,
+                                  fromMaybeEncode, toProxy)
+import Data.Massiv.Array.IO.Image
+import Graphics.ColorSpace
+import Prelude as P hiding (readFile, writeFile)
+import System.Directory (createDirectoryIfMissing, getTemporaryDirectory)
+import System.FilePath
+import System.IO (hClose, openBinaryTempFile)
+import System.Process (readProcess)
 
 
 
@@ -262,7 +260,7 @@
 
     * __read__: ('RGB' 'Word8'), ('RGBA' 'Word8')
     * __write__: ('RGB' 'Word8')
-    * Also supports reading and writing animated images, when used as @'GIFA'@
+    * Also supports reading and writing animated images
 
 * 'HDR':
 
diff --git a/src/Data/Massiv/Array/IO/Base.hs b/src/Data/Massiv/Array/IO/Base.hs
--- a/src/Data/Massiv/Array/IO/Base.hs
+++ b/src/Data/Massiv/Array/IO/Base.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE RankNTypes            #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
-{-# LANGUAGE UndecidableInstances  #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE UndecidableInstances #-}
 -- |
 -- Module      : Data.Massiv.Array.IO.Base
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -31,14 +31,14 @@
   , convertEither
   ) where
 
-import           Control.Exception    (Exception, throw)
-import qualified Data.ByteString      as B (ByteString)
+import Control.Exception (Exception, throw)
+import qualified Data.ByteString as B (ByteString)
 import qualified Data.ByteString.Lazy as BL (ByteString)
-import           Data.Default         (Default (..))
-import           Data.Massiv.Array
-import           Data.Maybe           (fromMaybe)
-import           Data.Typeable
-import           Graphics.ColorSpace  (ColorSpace, Pixel)
+import Data.Default (Default(..))
+import Data.Massiv.Array
+import Data.Maybe (fromMaybe)
+import Data.Typeable
+import Graphics.ColorSpace (ColorSpace, Pixel)
 
 type Image r cs e = Array r Ix2 (Pixel cs e)
 
diff --git a/src/Data/Massiv/Array/IO/Image.hs b/src/Data/Massiv/Array/IO/Image.hs
--- a/src/Data/Massiv/Array/IO/Image.hs
+++ b/src/Data/Massiv/Array/IO/Image.hs
@@ -1,8 +1,8 @@
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE GADTs                 #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE TypeSynonymInstances  #-}
+{-# LANGUAGE TypeSynonymInstances #-}
 -- |
 -- Module      : Data.Massiv.Array.IO.Image
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -24,17 +24,17 @@
   , module Data.Massiv.Array.IO.Image.Netpbm
   ) where
 
-import           Control.Exception                      (throw)
-import           Data.Massiv.Array
-import           Data.Massiv.Array.IO.Base
-import           Data.Massiv.Array.IO.Image.JuicyPixels
-import           Data.Massiv.Array.IO.Image.Netpbm
-import qualified Data.ByteString                        as B (ByteString)
-import qualified Data.ByteString.Lazy                   as BL (ByteString)
-import           Data.Char                              (toLower)
-import           Graphics.ColorSpace
-import           Prelude                                as P
-import           System.FilePath                        (takeExtension)
+import Control.Exception (throw)
+import qualified Data.ByteString as B (ByteString)
+import qualified Data.ByteString.Lazy as BL (ByteString)
+import Data.Char (toLower)
+import Data.Massiv.Array
+import Data.Massiv.Array.IO.Base
+import Data.Massiv.Array.IO.Image.JuicyPixels
+import Data.Massiv.Array.IO.Image.Netpbm
+import Graphics.ColorSpace
+import Prelude as P
+import System.FilePath (takeExtension)
 
 
 
diff --git a/src/Data/Massiv/Array/IO/Image/JuicyPixels.hs b/src/Data/Massiv/Array/IO/Image/JuicyPixels.hs
--- a/src/Data/Massiv/Array/IO/Image/JuicyPixels.hs
+++ b/src/Data/Massiv/Array/IO/Image/JuicyPixels.hs
@@ -1,12 +1,14 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE RankNTypes            #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TupleSections         #-}
-{-# LANGUAGE TypeFamilies          #-}
-{-# LANGUAGE TypeOperators         #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TupleSections #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
 -- |
 -- Module      : Data.Massiv.Array.IO.Image.JuicyPixels
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -69,25 +71,41 @@
   , fromAnyDynamicImage
   ) where
 
-import           Prelude                           as P
+import Prelude as P
 
-import qualified Codec.Picture                     as JP
-import qualified Codec.Picture.ColorQuant          as JP
-import qualified Codec.Picture.Gif                 as JP
-import qualified Codec.Picture.Jpg                 as JP
-import           Control.Exception
-import           Control.Monad                     (guard, msum)
-import           Data.Bifunctor
-import qualified Data.ByteString                   as B
-import qualified Data.ByteString.Lazy              as BL (ByteString)
-import           Data.Default                      (Default (..))
-import           Data.Massiv.Array                 as M
-import           Data.Massiv.Array.IO.Base
-import           Data.Massiv.Array.Manifest.Vector
-import           Data.Typeable
-import qualified Data.Vector.Storable              as V
-import           Foreign.Storable                  (Storable (sizeOf))
-import           Graphics.ColorSpace
+import qualified Codec.Picture as JP
+import qualified Codec.Picture.ColorQuant as JP
+import qualified Codec.Picture.Gif as JP
+import qualified Codec.Picture.Jpg as JP
+import Control.Exception
+import Control.Monad (guard, msum)
+import Data.Bifunctor
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as BL (ByteString)
+import Data.Default (Default(..))
+import Data.Massiv.Array as M
+import Data.Massiv.Array.IO.Base
+import Data.Massiv.Array.Manifest.Vector
+import Data.Typeable
+import qualified Data.Vector.Storable as V
+import Foreign.Storable (Storable(sizeOf))
+import Graphics.ColorSpace
+
+#if !MIN_VERSION_massiv(0, 2, 7)
+pattern Sz :: ix -> ix
+pattern Sz ix = ix
+type Sz ix = ix
+#endif
+#if !MIN_VERSION_massiv(0, 3, 0)
+fromVectorM ::
+     (Construct S ix a, Mutable S ix a, Storable a)
+  => Comp
+  -> Sz ix
+  -> V.Vector a
+  -> Maybe (Array S ix a)
+fromVectorM comp sz = pure . fromVector comp sz
+#endif
+
 --------------------------------------------------------------------------------
 -- BMP Format ------------------------------------------------------------------
 --------------------------------------------------------------------------------
@@ -399,7 +417,7 @@
           => JP.PaletteOptions
           -> Image r RGB e
           -> Maybe (JP.Image JP.Pixel8, JP.Palette)
-palettizeRGB pal img = do
+palettizeRGB pal img =
   msum
     [ do Refl <- eqT :: Maybe (e :~: Word8)
          return $ palettize' img
@@ -748,8 +766,7 @@
 
 elevate
   :: forall cs e' e.
-     ( Functor (Pixel cs)
-     , ColorSpace cs e'
+     ( ColorSpace cs e'
      , ColorSpace cs e
      , Source D Ix2 (Pixel cs e')
      )
@@ -769,7 +786,7 @@
          return $ M.map toDouble img
     ]
 
-fromDynamicImage :: forall cs e . (ColorSpace cs e, Source S Ix2 (Pixel cs e))
+fromDynamicImage :: forall cs e . ColorSpace cs e
                  => JP.DynamicImage -> Maybe (Image S cs e)
 fromDynamicImage jpDynImg =
   case jpDynImg of
@@ -817,7 +834,7 @@
 
 fromAnyDynamicImage :: (Mutable r Ix2 (Pixel cs e), ColorSpace cs e) =>
                        JP.DynamicImage -> Maybe (Image r cs e)
-fromAnyDynamicImage jpDynImg = do
+fromAnyDynamicImage jpDynImg =
   case jpDynImg of
     JP.ImageY8 jimg     -> (fromJPImageUnsafe jimg :: Maybe (Image S Y Word8))     >>= toAnyCS
     JP.ImageY16 jimg    -> (fromJPImageUnsafe jimg :: Maybe (Image S Y Word16))    >>= toAnyCS
@@ -838,7 +855,6 @@
   :: forall r' cs' e' r cs e.
      ( Source r' Ix2 (Pixel cs' e')
      , Mutable r Ix2 (Pixel cs e)
-     , Storable (Pixel cs e)
      , ColorSpace cs e
      , ToYA cs' e'
      , ToRGBA cs' e'
@@ -895,16 +911,14 @@
 
 -- Encoding
 
--- | TODO: Validate size
 toJPImageUnsafe
   :: forall r cs a . (JP.Pixel a, Source r Ix2 (Pixel cs (JP.PixelBaseComponent a)),
-                      ColorSpace cs (JP.PixelBaseComponent a),
-                      Storable (Pixel cs (JP.PixelBaseComponent a)))
+                      ColorSpace cs (JP.PixelBaseComponent a))
   => Image r cs (JP.PixelBaseComponent a)
   -> JP.Image a
 toJPImageUnsafe img = JP.Image n m $ V.unsafeCast $ toVector arrS where
   !arrS = computeSource img :: Image S cs (JP.PixelBaseComponent a)
-  (m :. n) = size img
+  Sz (m :. n) = size img
 {-# INLINE toJPImageUnsafe #-}
 
 toJPImageY8 :: Source r Ix2 (Pixel Y Word8) => Image r Y Word8 -> JP.Image JP.Pixel8
@@ -969,6 +983,5 @@
                      JP.Image jpx -> Maybe (Image S cs e)
 fromJPImageUnsafe (JP.Image n m !v) = do
   guard (n * m * sizeOf (undefined :: Pixel cs e) == V.length v)
-  return $ fromVector Par (m :. n) $ V.unsafeCast v
+  fromVectorM Par (Sz (m :. n)) $ V.unsafeCast v
 {-# INLINE fromJPImageUnsafe #-}
-
diff --git a/src/Data/Massiv/Array/IO/Image/Netpbm.hs b/src/Data/Massiv/Array/IO/Image/Netpbm.hs
--- a/src/Data/Massiv/Array/IO/Image/Netpbm.hs
+++ b/src/Data/Massiv/Array/IO/Image/Netpbm.hs
@@ -1,12 +1,14 @@
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns        #-}
-{-# LANGUAGE RecordWildCards       #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
-{-# LANGUAGE TypeOperators         #-}
-{-# LANGUAGE TypeSynonymInstances  #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE TypeSynonymInstances #-}
 -- |
 -- Module      : Data.Massiv.Array.IO.Image.Netpbm
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -25,21 +27,36 @@
   , PPM(..)
   ) where
 
-import           Control.Exception
-import           Control.Monad                          (guard)
-import qualified Data.ByteString                        as B (ByteString)
-import           Data.Massiv.Array                      as M
-import           Data.Massiv.Array.IO.Base
-import           Data.Massiv.Array.IO.Image.JuicyPixels (toAnyCS)
-import           Data.Massiv.Array.Manifest.Vector
-import           Data.Typeable
-import qualified Data.Vector.Storable                   as V
-import           Foreign.Storable                       (Storable)
-import           Graphics.ColorSpace
-import           Graphics.Netpbm                        as Netpbm hiding (PPM)
-import qualified Graphics.Netpbm                        as Netpbm (PPM (..))
-import           Prelude                                as P
+import Control.Exception
+import Control.Monad (guard)
+import qualified Data.ByteString as B (ByteString)
+import Data.Massiv.Array as M
+import Data.Massiv.Array.IO.Base
+import Data.Massiv.Array.IO.Image.JuicyPixels (toAnyCS)
+import Data.Massiv.Array.Manifest.Vector
+import Data.Typeable
+import qualified Data.Vector.Storable as V
+import Foreign.Storable (Storable)
+import Graphics.ColorSpace
+import Graphics.Netpbm as Netpbm hiding (PPM)
+import qualified Graphics.Netpbm as Netpbm (PPM(..))
+import Prelude as P
 
+#if !MIN_VERSION_massiv(0, 2, 7)
+pattern Sz :: ix -> ix
+pattern Sz ix = ix
+type Sz ix = ix
+#endif
+#if !MIN_VERSION_massiv(0, 3, 0)
+fromVectorM ::
+     (Construct S ix a, Mutable S ix a, Storable a)
+  => Comp
+  -> Sz ix
+  -> V.Vector a
+  -> Maybe (Array S ix a)
+fromVectorM comp sz = pure . fromVector comp sz
+#endif
+
 -- | Netpbm: portable bitmap image with @.pbm@ extension.
 data PBM = PBM deriving Show
 
@@ -143,7 +160,7 @@
            -> Array B Ix1 (Image r cs e)
 decodePPMs f converter bs =
   either (throw . DecodeError) (fromList Seq) $
-  (P.map (fromEitherDecode f showNetpbmCS converter . Right) . fst) <$>
+  P.map (fromEitherDecode f showNetpbmCS converter . Right) . fst <$>
   parsePPM bs
 {-# INLINE decodePPMs #-}
 
@@ -166,12 +183,12 @@
   => Int -> Int -> V.Vector a -> Maybe (Image S cs e)
 fromNetpbmImageUnsafe m n v = do
   guard (n * m == V.length v)
-  return $ fromVector Par (m :. n) $ V.unsafeCast v
+  fromVectorM Par (Sz (m :. n)) $ V.unsafeCast v
 
 
 
 showNetpbmCS :: Netpbm.PPM -> String
-showNetpbmCS Netpbm.PPM {ppmData} = do
+showNetpbmCS Netpbm.PPM {ppmData} =
   case ppmData of
     PbmPixelData _      -> "Image S X Bit"
     PgmPixelData8 _     -> "Image S Y Word8"
@@ -181,7 +198,7 @@
 
 
 fromNetpbmImage
-  :: forall cs e . (ColorSpace cs e, V.Storable (Pixel cs e)) =>
+  :: forall cs e . ColorSpace cs e =>
      Netpbm.PPM -> Maybe (Image S cs e)
 fromNetpbmImage Netpbm.PPM {..} = do
   let m = ppmHeight ppmHeader
@@ -200,7 +217,7 @@
 
 
 fromNetpbmImageAuto
-  :: forall cs e r . (Mutable r Ix2 (Pixel cs e), ColorSpace cs e, V.Storable (Pixel cs e)) =>
+  :: forall cs e r . (Mutable r Ix2 (Pixel cs e), ColorSpace cs e) =>
      Netpbm.PPM -> Maybe (Image r cs e)
 fromNetpbmImageAuto Netpbm.PPM {..} = do
   let m = ppmHeight ppmHeader
diff --git a/src/Graphics/ColorSpace.hs b/src/Graphics/ColorSpace.hs
--- a/src/Graphics/ColorSpace.hs
+++ b/src/Graphics/ColorSpace.hs
@@ -1,15 +1,15 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE UndecidableInstances  #-}
-{-# LANGUAGE ViewPatterns          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE ViewPatterns #-}
 #if __GLASGOW_HASKELL__ >= 800
   {-# OPTIONS_GHC -Wno-redundant-constraints #-}
-  {-# LANGUAGE MonoLocalBinds          #-}
+{-# LANGUAGE MonoLocalBinds #-}
 #endif
 -- |
 -- Module      : Graphics.ColorSpace
@@ -123,16 +123,16 @@
   Word8, Word16, Word32, Word64
   ) where
 
-import           Data.Word
-import           Graphics.ColorSpace.Binary
-import           Graphics.ColorSpace.CMYK
-import           Graphics.ColorSpace.Complex
-import           Graphics.ColorSpace.HSI
-import           Graphics.ColorSpace.Internal
-import           Graphics.ColorSpace.RGB
-import           Graphics.ColorSpace.X
-import           Graphics.ColorSpace.Y
-import           Graphics.ColorSpace.YCbCr
+import Data.Word
+import Graphics.ColorSpace.Binary
+import Graphics.ColorSpace.CMYK
+import Graphics.ColorSpace.Complex
+import Graphics.ColorSpace.HSI
+import Graphics.ColorSpace.Internal
+import Graphics.ColorSpace.RGB
+import Graphics.ColorSpace.X
+import Graphics.ColorSpace.Y
+import Graphics.ColorSpace.YCbCr
 
 
 -- -- Binary:
diff --git a/src/Graphics/ColorSpace/Binary.hs b/src/Graphics/ColorSpace/Binary.hs
--- a/src/Graphics/ColorSpace/Binary.hs
+++ b/src/Graphics/ColorSpace/Binary.hs
@@ -1,11 +1,11 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.Binary
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -18,19 +18,19 @@
   Bit, on, off, isOn, isOff, fromBool, zero, one, bit2bool, bool2bit, toNum, fromNum
   ) where
 
-import           Control.Applicative
-import           Control.Monad
-import           Data.Bits
-import           Data.Typeable                (Typeable)
-import qualified Data.Vector.Generic          as V
-import qualified Data.Vector.Generic.Mutable  as M
-import qualified Data.Vector.Unboxed          as U
-import           Data.Word                    (Word8)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Graphics.ColorSpace.X
-import           Prelude                      hiding (map)
+import Control.Applicative
+import Control.Monad
+import Data.Bits
+import Data.Typeable (Typeable)
+import qualified Data.Vector.Generic as V
+import qualified Data.Vector.Generic.Mutable as M
+import qualified Data.Vector.Unboxed as U
+import Data.Word (Word8)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Graphics.ColorSpace.X
+import Prelude hiding (map)
 
 
 -- | Under the hood, binary pixels are represented as `Word8`, but can only take
@@ -92,11 +92,11 @@
   {-# INLINE (.|.) #-}
   xor = liftA2 xor
   {-# INLINE xor #-}
-  complement = liftA complement
+  complement = fmap complement
   {-# INLINE complement #-}
-  shift !b !n = liftA (`shift` n) b
+  shift !b !n = fmap (`shift` n) b
   {-# INLINE shift #-}
-  rotate !b !n = liftA (`rotate` n) b
+  rotate !b !n = fmap (`rotate` n) b
   {-# INLINE rotate #-}
   zeroBits = pure zeroBits
   {-# INLINE zeroBits #-}
@@ -236,12 +236,12 @@
   alignment _ = alignment (undefined :: Word8)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     b <- peek q
     return (Bit b)
   {-# INLINE peek #-}
   poke !p (Bit b) = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     poke q b
   {-# INLINE poke #-}
 
diff --git a/src/Graphics/ColorSpace/CMYK.hs b/src/Graphics/ColorSpace/CMYK.hs
--- a/src/Graphics/ColorSpace/CMYK.hs
+++ b/src/Graphics/ColorSpace/CMYK.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.CMYK
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -17,12 +17,12 @@
   CMYK(..), CMYKA(..), Pixel(..)
   ) where
 
-import           Data.Foldable
-import           Data.Typeable                (Typeable)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Prelude                      hiding (map)
+import Data.Foldable
+import Data.Typeable (Typeable)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Prelude hiding (map)
 
 ------------
 --- CMYK ---
@@ -45,7 +45,7 @@
 instance Elevator e => ColorSpace CMYK e where
   type Components CMYK e = (e, e, e, e)
 
-  fromComponents !(c, m, y, k) = PixelCMYK c m y k
+  fromComponents (c, m, y, k) = PixelCMYK c m y k
   {-# INLINE fromComponents #-}
   toComponents (PixelCMYK c m y k) = (c, m, y, k)
   {-# INLINE toComponents #-}
@@ -133,7 +133,7 @@
 instance Elevator e => ColorSpace CMYKA e where
   type Components CMYKA e = (e, e, e, e, e)
 
-  fromComponents !(c, m, y, k, a) = PixelCMYKA c m y k a
+  fromComponents (c, m, y, k, a) = PixelCMYKA c m y k a
   {-# INLINE fromComponents #-}
   toComponents (PixelCMYKA c m y k a) = (c, m, y, k, a)
   {-# INLINE toComponents #-}
@@ -195,7 +195,7 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     c <- peek q
     m <- peekElemOff q 1
     y <- peekElemOff q 2
@@ -204,7 +204,7 @@
     return (PixelCMYKA c m y k a)
   {-# INLINE peek #-}
   poke !p (PixelCMYKA c m y k a) = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     poke q c
     pokeElemOff q 1 m
     pokeElemOff q 2 y
diff --git a/src/Graphics/ColorSpace/Complex.hs b/src/Graphics/ColorSpace/Complex.hs
--- a/src/Graphics/ColorSpace/Complex.hs
+++ b/src/Graphics/ColorSpace/Complex.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE BangPatterns     #-}
-{-# LANGUAGE CPP              #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
 #if __GLASGOW_HASKELL__ >= 800
   {-# OPTIONS_GHC -Wno-redundant-constraints #-}
@@ -21,10 +21,10 @@
   conjugate
   ) where
 
-import           Control.Applicative
-import           Data.Complex                 (Complex (..))
-import qualified Data.Complex                 as C hiding (Complex (..))
-import           Graphics.ColorSpace.Internal
+import Control.Applicative
+import Data.Complex (Complex(..))
+import qualified Data.Complex as C hiding (Complex(..))
+import Graphics.ColorSpace.Internal
 
 
 
@@ -40,12 +40,12 @@
 
 -- | Extracts the real part of a complex pixel.
 realPart :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
-realPart = liftA C.realPart
+realPart = fmap C.realPart
 {-# INLINE realPart #-}
 
 -- | Extracts the imaginary part of a complex pixel.
 imagPart :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
-imagPart = liftA C.imagPart
+imagPart = fmap C.imagPart
 {-# INLINE imagPart #-}
 
 -- | Form a complex pixel from polar components of magnitude and phase.
@@ -56,7 +56,7 @@
 
 -- | @'cis' t@ is a complex pixel with magnitude 1 and phase t (modulo @2*'pi'@).
 cis :: (ColorSpace cs e, RealFloat e) => Pixel cs e -> Pixel cs (Complex e)
-cis = liftA C.cis
+cis = fmap C.cis
 {-# INLINE cis #-}
 
 -- | The function @'polar'@ takes a complex pixel and returns a (magnitude, phase)
@@ -68,18 +68,18 @@
 
 -- | The nonnegative magnitude of a complex pixel.
 magnitude :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
-magnitude = liftA C.magnitude
+magnitude = fmap C.magnitude
 {-# INLINE magnitude #-}
 
 -- | The phase of a complex pixel, in the range @(-'pi', 'pi']@. If the
 -- magnitude is zero, then so is the phase.
 phase :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
-phase = liftA C.phase
+phase = fmap C.phase
 {-# INLINE phase #-}
 
 -- | The conjugate of a complex pixel.
 conjugate :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs (Complex e)
-conjugate = liftA C.conjugate
+conjugate = fmap C.conjugate
 {-# INLINE conjugate #-}
 
 
diff --git a/src/Graphics/ColorSpace/Elevator.hs b/src/Graphics/ColorSpace/Elevator.hs
--- a/src/Graphics/ColorSpace/Elevator.hs
+++ b/src/Graphics/ColorSpace/Elevator.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE BangPatterns        #-}
-{-# LANGUAGE CPP                 #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 #if __GLASGOW_HASKELL__ >= 800
   {-# OPTIONS_GHC -Wno-redundant-constraints #-}
@@ -17,13 +17,13 @@
   , clamp01
   ) where
 
-import qualified Data.Complex         as C
-import           Data.Int
-import           Data.Typeable
-import           Data.Vector.Storable (Storable)
-import           Data.Vector.Unboxed  (Unbox)
-import           Data.Word
-import           GHC.Float
+import qualified Data.Complex as C
+import Data.Int
+import Data.Typeable
+import Data.Vector.Storable (Storable)
+import Data.Vector.Unboxed (Unbox)
+import Data.Word
+import GHC.Float
 
 
 -- | A class with a set of convenient functions that allow for changing precision of
diff --git a/src/Graphics/ColorSpace/HSI.hs b/src/Graphics/ColorSpace/HSI.hs
--- a/src/Graphics/ColorSpace/HSI.hs
+++ b/src/Graphics/ColorSpace/HSI.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.HSI
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -17,12 +17,12 @@
   HSI(..), HSIA(..), Pixel(..)
   ) where
 
-import           Data.Foldable
-import           Data.Typeable                (Typeable)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Prelude                      hiding (map)
+import Data.Foldable
+import Data.Typeable (Typeable)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Prelude hiding (map)
 
 -----------
 --- HSI ---
@@ -46,7 +46,7 @@
 
   toComponents (PixelHSI h s i) = (h, s, i)
   {-# INLINE toComponents #-}
-  fromComponents !(h, s, i) = PixelHSI h s i
+  fromComponents (h, s, i) = PixelHSI h s i
   {-# INLINE fromComponents #-}
   getPxC (PixelHSI h _ _) HueHSI = h
   getPxC (PixelHSI _ s _) SatHSI = s
@@ -89,14 +89,14 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     r <- peek q
     g <- peekElemOff q 1
     b <- peekElemOff q 2
     return (PixelHSI r g b)
   {-# INLINE peek #-}
   poke !p (PixelHSI r g b) = do
-    q <- return $ castPtr p
+    let !q =  castPtr p
     poke q r
     pokeElemOff q 1 g
     pokeElemOff q 2 b
@@ -126,7 +126,7 @@
 
   toComponents (PixelHSIA h s i a) = (h, s, i, a)
   {-# INLINE toComponents #-}
-  fromComponents !(h, s, i, a) = PixelHSIA h s i a
+  fromComponents (h, s, i, a) = PixelHSIA h s i a
   {-# INLINE fromComponents #-}
   getPxC (PixelHSIA h _ _ _) HueHSIA   = h
   getPxC (PixelHSIA _ s _ _) SatHSIA   = s
@@ -180,7 +180,7 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     h <- peek q
     s <- peekElemOff q 1
     i <- peekElemOff q 2
@@ -188,7 +188,7 @@
     return (PixelHSIA h s i a)
   {-# INLINE peek #-}
   poke !p (PixelHSIA h s i a) = do
-    q <- return $ castPtr p
+    let !q = castPtr p
     poke q h
     pokeElemOff q 1 s
     pokeElemOff q 2 i
diff --git a/src/Graphics/ColorSpace/Internal.hs b/src/Graphics/ColorSpace/Internal.hs
--- a/src/Graphics/ColorSpace/Internal.hs
+++ b/src/Graphics/ColorSpace/Internal.hs
@@ -1,8 +1,7 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.Internal
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -18,17 +17,17 @@
   , module Graphics.ColorSpace.Elevator
   ) where
 
-import           Control.Applicative
-import           Control.DeepSeq              (NFData (rnf), deepseq)
-import           Control.Monad                (liftM)
-import           Data.Default
-import           Data.Foldable
-import           Data.Typeable
-import qualified Data.Vector.Generic          as V
-import qualified Data.Vector.Generic.Mutable  as VM
-import qualified Data.Vector.Storable         as VS
-import qualified Data.Vector.Unboxed          as VU
-import           Graphics.ColorSpace.Elevator
+import Control.Applicative
+import Control.DeepSeq (NFData(rnf), deepseq)
+import Control.Monad (liftM)
+import Data.Default
+import Data.Foldable
+import Data.Typeable
+import qualified Data.Vector.Generic as V
+import qualified Data.Vector.Generic.Mutable as VM
+import qualified Data.Vector.Storable as VS
+import qualified Data.Vector.Unboxed as VU
+import Graphics.ColorSpace.Elevator
 
 
 -- | A Pixel family with a color space and a precision of elements.
@@ -130,9 +129,9 @@
   {-# INLINE (-) #-}
   (*)         = liftA2 (*)
   {-# INLINE (*) #-}
-  abs         = liftA abs
+  abs         = fmap abs
   {-# INLINE abs #-}
-  signum      = liftA signum
+  signum      = fmap signum
   {-# INLINE signum #-}
   fromInteger = promote . fromInteger
   {-# INLINE fromInteger #-}
@@ -141,7 +140,7 @@
 instance (ColorSpace cs e, Fractional e) => Fractional (Pixel cs e) where
   (/)          = liftA2 (/)
   {-# INLINE (/) #-}
-  recip        = liftA recip
+  recip        = fmap recip
   {-# INLINE recip #-}
   fromRational = promote . fromRational
   {-# INLINE fromRational #-}
@@ -150,29 +149,29 @@
 instance (ColorSpace cs e, Floating e) => Floating (Pixel cs e) where
   pi      = promote pi
   {-# INLINE pi #-}
-  exp     = liftA exp
+  exp     = fmap exp
   {-# INLINE exp #-}
-  log     = liftA log
+  log     = fmap log
   {-# INLINE log #-}
-  sin     = liftA sin
+  sin     = fmap sin
   {-# INLINE sin #-}
-  cos     = liftA cos
+  cos     = fmap cos
   {-# INLINE cos #-}
-  asin    = liftA asin
+  asin    = fmap asin
   {-# INLINE asin #-}
-  atan    = liftA atan
+  atan    = fmap atan
   {-# INLINE atan #-}
-  acos    = liftA acos
+  acos    = fmap acos
   {-# INLINE acos #-}
-  sinh    = liftA sinh
+  sinh    = fmap sinh
   {-# INLINE sinh #-}
-  cosh    = liftA cosh
+  cosh    = fmap cosh
   {-# INLINE cosh #-}
-  asinh   = liftA asinh
+  asinh   = fmap asinh
   {-# INLINE asinh #-}
-  atanh   = liftA atanh
+  atanh   = fmap atanh
   {-# INLINE atanh #-}
-  acosh   = liftA acosh
+  acosh   = fmap acosh
   {-# INLINE acosh #-}
 
 instance (ColorSpace cs e, Bounded e) => Bounded (Pixel cs e) where
diff --git a/src/Graphics/ColorSpace/RGB.hs b/src/Graphics/ColorSpace/RGB.hs
--- a/src/Graphics/ColorSpace/RGB.hs
+++ b/src/Graphics/ColorSpace/RGB.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.RGB
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -17,11 +17,11 @@
   RGB(..), RGBA(..), Pixel(..)
   ) where
 
-import           Data.Typeable                (Typeable)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Prelude                      hiding (map)
+import Data.Typeable (Typeable)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Prelude hiding (map)
 
 -----------
 --- RGB ---
@@ -44,7 +44,7 @@
 
   toComponents (PixelRGB r g b) = (r, g, b)
   {-# INLINE toComponents #-}
-  fromComponents !(r, g, b) = PixelRGB r g b
+  fromComponents (r, g, b) = PixelRGB r g b
   {-# INLINE fromComponents #-}
   getPxC (PixelRGB r _ _) RedRGB   = r
   getPxC (PixelRGB _ g _) GreenRGB = g
@@ -117,7 +117,7 @@
 
   toComponents (PixelRGBA r g b a) = (r, g, b, a)
   {-# INLINE toComponents #-}
-  fromComponents !(r, g, b, a) = PixelRGBA r g b a
+  fromComponents (r, g, b, a) = PixelRGBA r g b a
   {-# INLINE fromComponents #-}
   getPxC (PixelRGBA r _ _ _) RedRGBA   = r
   getPxC (PixelRGBA _ g _ _) GreenRGBA = g
@@ -167,14 +167,14 @@
   sizeOf _ = 4 * sizeOf (undefined :: e)
   alignment _ = alignment (undefined :: e)
   peek p = do
-    q <- return $ castPtr p
+    let q = castPtr p
     r <- peek q
     g <- peekElemOff q 1
     b <- peekElemOff q 2
     a <- peekElemOff q 3
     return (PixelRGBA r g b a)
   poke p (PixelRGBA r g b a) = do
-    q <- return $ castPtr p
+    let q = castPtr p
     poke q r
     pokeElemOff q 1 g
     pokeElemOff q 2 b
diff --git a/src/Graphics/ColorSpace/X.hs b/src/Graphics/ColorSpace/X.hs
--- a/src/Graphics/ColorSpace/X.hs
+++ b/src/Graphics/ColorSpace/X.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.X
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -20,12 +20,12 @@
   , fromPixelsX
   ) where
 
-import           Data.Foldable
-import           Data.Typeable                (Typeable)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Prelude                      as P
+import Data.Foldable
+import Data.Typeable (Typeable)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Prelude as P
 
 -- ^ This is a single channel colorspace, that is designed to separate Gray
 -- level values from other types of colorspace, hence it is not convertible to
@@ -51,7 +51,7 @@
   {-# INLINE toComponents #-}
   getPxC (PixelX g) X = g
   {-# INLINE getPxC #-}
-  setPxC (PixelX _) X g = PixelX g
+  setPxC (PixelX _) X = PixelX
   {-# INLINE setPxC #-}
   mapPxC f (PixelX g) = PixelX (f X g)
   {-# INLINE mapPxC #-}
@@ -92,12 +92,12 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let q = castPtr p
     g <- peek q
     return (PixelX g)
   {-# INLINE peek #-}
   poke !p (PixelX g) = do
-    q <- return $ castPtr p
+    let q = castPtr p
     poke q g
   {-# INLINE poke #-}
 
diff --git a/src/Graphics/ColorSpace/Y.hs b/src/Graphics/ColorSpace/Y.hs
--- a/src/Graphics/ColorSpace/Y.hs
+++ b/src/Graphics/ColorSpace/Y.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.Y
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -17,12 +17,12 @@
   Y(..), YA(..), Pixel(..)
   ) where
 
-import           Data.Foldable
-import           Data.Typeable                (Typeable)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Prelude                      hiding (map)
+import Data.Foldable
+import Data.Typeable (Typeable)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Prelude hiding (map)
 
 ---------
 --- Y ---
@@ -45,7 +45,7 @@
   {-# INLINE toComponents #-}
   getPxC (PixelY y) LumaY = y
   {-# INLINE getPxC #-}
-  setPxC _ LumaY y = PixelY y
+  setPxC _ LumaY = PixelY
   {-# INLINE setPxC #-}
   mapPxC f (PixelY y) = PixelY (f LumaY y)
   {-# INLINE mapPxC #-}
@@ -166,13 +166,13 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let q = castPtr p
     y <- peekElemOff q 0
     a <- peekElemOff q 1
     return (PixelYA y a)
   {-# INLINE peek #-}
   poke !p (PixelYA y a) = do
-    q <- return $ castPtr p
+    let q = castPtr p
     pokeElemOff q 0 y
     pokeElemOff q 1 a
   {-# INLINE poke #-}
diff --git a/src/Graphics/ColorSpace/YCbCr.hs b/src/Graphics/ColorSpace/YCbCr.hs
--- a/src/Graphics/ColorSpace/YCbCr.hs
+++ b/src/Graphics/ColorSpace/YCbCr.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE BangPatterns          #-}
-{-# LANGUAGE DeriveDataTypeable    #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 -- |
 -- Module      : Graphics.ColorSpace.YCbCr
 -- Copyright   : (c) Alexey Kuleshevich 2018-2019
@@ -17,12 +17,12 @@
   YCbCr(..), YCbCrA(..), Pixel(..)
   ) where
 
-import           Data.Foldable
-import           Data.Typeable            (Typeable)
-import           Foreign.Ptr
-import           Foreign.Storable
-import           Graphics.ColorSpace.Internal
-import           Prelude                  hiding (map)
+import Data.Foldable
+import Data.Typeable (Typeable)
+import Foreign.Ptr
+import Foreign.Storable
+import Graphics.ColorSpace.Internal
+import Prelude hiding (map)
 
 -------------
 --- YCbCr ---
@@ -45,7 +45,7 @@
 instance Elevator e => ColorSpace YCbCr e where
   type Components YCbCr e = (e, e, e)
 
-  fromComponents !(y, b, r) = PixelYCbCr y b r
+  fromComponents (y, b, r) = PixelYCbCr y b r
   {-# INLINE fromComponents #-}
   toComponents (PixelYCbCr y b r) = (y, b, r)
   {-# INLINE toComponents #-}
@@ -88,14 +88,14 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let q = castPtr p
     y <- peek q
     b <- peekElemOff q 1
     r <- peekElemOff q 2
     return (PixelYCbCr y b r)
   {-# INLINE poke #-}
   poke !p (PixelYCbCr y b r) = do
-    q <- return $ castPtr p
+    let q = castPtr p
     pokeElemOff q 0 y
     pokeElemOff q 1 b
     pokeElemOff q 2 r
@@ -124,7 +124,7 @@
 instance Elevator e => ColorSpace YCbCrA e where
   type Components YCbCrA e = (e, e, e, e)
 
-  fromComponents !(y, b, r, a) = PixelYCbCrA y b r a
+  fromComponents (y, b, r, a) = PixelYCbCrA y b r a
   {-# INLINE fromComponents #-}
   toComponents (PixelYCbCrA y b r a) = (y, b, r, a)
   {-# INLINE toComponents #-}
@@ -181,7 +181,7 @@
   alignment _ = alignment (undefined :: e)
   {-# INLINE alignment #-}
   peek !p = do
-    q <- return $ castPtr p
+    let q = castPtr p
     y <- peekElemOff q 0
     b <- peekElemOff q 1
     r <- peekElemOff q 2
@@ -189,7 +189,7 @@
     return (PixelYCbCrA y b r a)
   {-# INLINE peek #-}
   poke !p (PixelYCbCrA y b r a) = do
-    q <- return $ castPtr p
+    let q = castPtr p
     poke q y
     pokeElemOff q 1 b
     pokeElemOff q 2 r
