diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+New in version 2.3.5:
+- Support for MonadFail Proposal.
+- Documentation updates.
+
 New in version 2.3.4:
 
 - Support for Semigroup (as superclass of) Monoid Proposal.
diff --git a/Data/Colour.hs b/Data/Colour.hs
--- a/Data/Colour.hs
+++ b/Data/Colour.hs
@@ -23,10 +23,10 @@
 -- |Datatypes for representing the human perception of colour.
 -- Includes common operations for blending and compositing colours.
 -- The most common way of creating colours is either by name
--- (see "Data.Colour.Names") or by giving an sRGB triple 
+-- (see "Data.Colour.Names") or by giving an sRGB triple
 -- (see "Data.Colour.SRGB").
 --
--- Methods of specifying Colours can be found in 
+-- Methods of specifying Colours can be found in
 --
 -- - "Data.Colour.SRGB"
 --
@@ -71,14 +71,14 @@
 -- typically produce colour blends that are too dark.
 --
 -- (Note that "Data.Colour" is a device /independent/ colour space, and
--- produces correct blends. 
+-- produces correct blends.
 -- e.g. compare @toSRGB (blend 0.5 lime red)@ with @RGB 0.5 0.5 0@)
 --
 -- Because these other colour libraries can only blend in device colour
 -- spaces, they are fundamentally broken and there is no \"right\" way
 -- to interface with them.
 -- For most libraries, the best one can do is assume they are working
--- with an sRGB colour space and doing incorrect blends.  
+-- with an sRGB colour space and doing incorrect blends.
 -- In these cases use "Data.Colour.SRGB" to convert to and from the
 -- colour coordinates.  This is the best advice for interfacing with cairo.
 --
@@ -149,7 +149,7 @@
                          ,(g0,s1) <- readsPrec (app_prec+1) s0
                          ,(b0,t)  <- readsPrec (app_prec+1) s1]) r
    where
-    mylex = return 
+    mylex = return
           . span (\c -> isAlphaNum c || c `elem` "._'")
           . dropWhile isSpace
 
diff --git a/Data/Colour/CIE.hs b/Data/Colour/CIE.hs
--- a/Data/Colour/CIE.hs
+++ b/Data/Colour/CIE.hs
@@ -20,7 +20,7 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 -}
--- |Colour operations defined by the International Commission on 
+-- |Colour operations defined by the International Commission on
 -- Illumination (CIE).
 module Data.Colour.CIE
  (Colour
diff --git a/Data/Colour/CIE/Illuminant.hs b/Data/Colour/CIE/Illuminant.hs
--- a/Data/Colour/CIE/Illuminant.hs
+++ b/Data/Colour/CIE/Illuminant.hs
@@ -20,7 +20,7 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 -}
--- |Standard illuminants defined by the International Commission on 
+-- |Standard illuminants defined by the International Commission on
 -- Illumination (CIE).
 module Data.Colour.CIE.Illuminant where
 
@@ -28,7 +28,7 @@
 
 -- |Incandescent \/ Tungsten
 a   :: (Fractional a) => Chromaticity a
-a   = mkChromaticity 0.44757 0.40745 
+a   = mkChromaticity 0.44757 0.40745
 
 -- |{obsolete} Direct sunlight at noon
 b   :: (Fractional a) => Chromaticity a
diff --git a/Data/Colour/Internal.hs b/Data/Colour/Internal.hs
--- a/Data/Colour/Internal.hs
+++ b/Data/Colour/Internal.hs
@@ -40,8 +40,8 @@
 -- colours can take you out of gamut.  Consider using 'blend' whenever
 -- possible.
 
--- Internally we store the colour in linear ITU-R BT.709 RGB colour space. 
-data Colour a = RGB !(Chan Red a) !(Chan Green a) !(Chan Blue a) 
+-- Internally we store the colour in linear ITU-R BT.709 RGB colour space.
+data Colour a = RGB !(Chan Red a) !(Chan Green a) !(Chan Blue a)
                 deriving (Eq)
 
 -- |Change the type used to represent the colour coordinates.
@@ -102,7 +102,7 @@
 
 -- |Creates an 'AlphaColour' from a 'Colour' with a given opacity.
 --
--- >c `withOpacity` o == dissolve o (opaque c) 
+-- >c `withOpacity` o == dissolve o (opaque c)
 withOpacity :: (Num a) => Colour a -> a -> AlphaColour a
 c `withOpacity` o = RGBA (darken o c) (Chan o)
 
@@ -187,7 +187,7 @@
 -- >c1 `atop` (opaque c2) == c1 `over` (opaque c2)
 -- >AlphaChannel (c1 `atop` c2) == AlphaChannel c2
 atop :: (Fractional a) => AlphaColour a -> AlphaColour a -> AlphaColour a
-atop (RGBA c0 (Chan a0)) (RGBA c1 (Chan a1)) = 
+atop (RGBA c0 (Chan a0)) (RGBA c1 (Chan a1)) =
   RGBA (darken a1 c0 `mappend` darken (1-a0) c1) (Chan a1)
 
 -- |'round's and then clamps @x@ between 0 and 'maxBound'.
diff --git a/Data/Colour/Names.hs b/Data/Colour/Names.hs
--- a/Data/Colour/Names.hs
+++ b/Data/Colour/Names.hs
@@ -28,7 +28,7 @@
 -- 'readColourName' takes a string naming a colour (must be all lowercase)
 -- and returns the colour.
 -- Fails if the name is not recognized.
-module Data.Colour.Names 
+module Data.Colour.Names
  (
   readColourName
  ,aliceblue
@@ -182,10 +182,11 @@
 where
 
 import Prelude hiding (tan)
+import qualified Control.Monad.Fail as Fail
 import Data.Colour.SRGB
 import Data.Colour (black)
 
-readColourName :: (Monad m, Ord a, Floating a) => String -> m (Colour a)
+readColourName :: (Fail.MonadFail m, Monad m, Ord a, Floating a) => String -> m (Colour a)
 readColourName "aliceblue" = return aliceblue
 readColourName "antiquewhite" = return antiquewhite
 readColourName "aqua" = return aqua
@@ -333,7 +334,7 @@
 readColourName "whitesmoke" = return whitesmoke
 readColourName "yellow" = return yellow
 readColourName "yellowgreen" = return yellowgreen
-readColourName x = fail $ 
+readColourName x = fail $
   "Data.Colour.Names.readColourName: Unknown colour name "++show x
 
 aliceblue :: (Ord a, Floating a) => Colour a
diff --git a/Data/Colour/RGB.hs b/Data/Colour/RGB.hs
--- a/Data/Colour/RGB.hs
+++ b/Data/Colour/RGB.hs
@@ -70,7 +70,7 @@
                          ,(p,s0) <- readsPrec (app_prec+1) s
                          ,(w,t)  <- readsPrec (app_prec+1) s0]) r
 
--- |An RGB gamut is specified by three primary colours (red, green, and 
+-- |An RGB gamut is specified by three primary colours (red, green, and
 -- blue) and a white point (often 'Data.Colour.CIE.Illuminant.d65').
 mkRGBGamut :: RGB (Chromaticity Rational) -- ^ The three primaries
            -> Chromaticity Rational       -- ^ The white point
diff --git a/Data/Colour/RGBSpace.hs b/Data/Colour/RGBSpace.hs
--- a/Data/Colour/RGBSpace.hs
+++ b/Data/Colour/RGBSpace.hs
@@ -138,7 +138,7 @@
 -- |Create a 'Colour' from red, green, and blue coordinates given in a
 -- general 'RGBSpace'.
 rgbUsingSpace :: (Fractional a) => RGBSpace a -> a -> a -> a -> Colour a
-rgbUsingSpace space = 
+rgbUsingSpace space =
   curryRGB (uncurryRGB (rgbUsingGamut (gamut space)) . fmap tinv)
  where
   tinv = transferInverse (transferFunction space)
diff --git a/Data/Colour/RGBSpace/HSL.hs b/Data/Colour/RGBSpace/HSL.hs
--- a/Data/Colour/RGBSpace/HSL.hs
+++ b/Data/Colour/RGBSpace/HSL.hs
@@ -21,7 +21,7 @@
 THE SOFTWARE.
 -}
 
-module Data.Colour.RGBSpace.HSL 
+module Data.Colour.RGBSpace.HSL
  (RGB
  ,hslView
  ,hue, saturation, lightness
@@ -38,7 +38,7 @@
  where
   (h,s,l,_,_) = hslsv rgb
 
--- |Returns the saturation coordinate of an 'RGB' triple for the HSL
+-- |Returns the saturation coordinate (range [0, 1]) of an 'RGB' triple for the HSL
 -- (hue-saturation-lightness) system.
 -- Note: This is different from 'Data.Colour.RGBSpace.HSV.saturation' for
 -- the "Data.Colour.RGBSpace.HSV"
@@ -47,7 +47,7 @@
  where
   (_,s,_,_,_) = hslsv rgb
 
--- |Returns the lightness coordinate of an 'RGB' triple for the HSL
+-- |Returns the lightness coordinate (range [0, 1]) of an 'RGB' triple for the HSL
 -- (hue-saturation-lightness) system.
 lightness :: (Fractional a, Ord a) => RGB a -> a
 lightness rgb = l
@@ -55,7 +55,8 @@
   (_,_,l,_,_) = hslsv rgb
 
 -- |Convert HSL (hue-saturation-lightness) coordinates to an 'RGB' value.
--- Hue is expected to be measured in degrees.
+-- Hue is expected to be measured in degrees [0,360], while saturation and
+-- lightness are expected to be in the closed range [0,1].
 hsl :: (RealFrac a, Ord a) => a -> a -> a -> RGB a
 hsl h s l = fmap component t
  where
diff --git a/Data/Colour/RGBSpace/HSV.hs b/Data/Colour/RGBSpace/HSV.hs
--- a/Data/Colour/RGBSpace/HSV.hs
+++ b/Data/Colour/RGBSpace/HSV.hs
@@ -21,7 +21,7 @@
 THE SOFTWARE.
 -}
 
-module Data.Colour.RGBSpace.HSV 
+module Data.Colour.RGBSpace.HSV
  (RGB
  ,hsvView
  ,hue, saturation, value
@@ -38,7 +38,7 @@
  where
   (h,_,_,s,v) = hslsv rgb
 
--- |Returns the saturation coordinate of an 'RGB' triple for the HSV
+-- |Returns the saturation coordinate (range [0,1]) of an 'RGB' triple for the HSV
 -- (hue-saturation-value) system.
 -- Note: This is different from 'Data.Colour.RGBSpace.HSL.saturation' for
 -- the "Data.Colour.RGBSpace.HSL"
@@ -47,7 +47,7 @@
  where
   (_,_,_,s,_) = hslsv rgb
 
--- |Returns the value coordinate of an 'RGB' triple for the HSV
+-- |Returns the value coordinate (raonge [0,1]) of an 'RGB' triple for the HSV
 -- (hue-saturation-value) system.
 value :: (Fractional a, Ord a) => RGB a -> a
 value rgb = v
@@ -55,8 +55,8 @@
   (_,_,_,_,v) = hslsv rgb
 
 -- |Convert HSV (hue-saturation-value) coordinates to an 'RGB' value.
--- Hue is expected to be measured in degrees.
-
+-- Hue is expected to be measured in degrees [0,360], while saturation and
+-- value are expected to be in the closed range [0,1].
 hsv :: (RealFrac a, Ord a) => a -> a -> a -> RGB a
 hsv h s v = case hi of
     0 -> RGB v t p
diff --git a/Data/Colour/SRGB/Linear.hs b/Data/Colour/SRGB/Linear.hs
--- a/Data/Colour/SRGB/Linear.hs
+++ b/Data/Colour/SRGB/Linear.hs
@@ -23,7 +23,7 @@
 -}
 -- |Provides a /linear/ colour space with the same gamut as
 -- "Data.Colour.SRGB".
-module Data.Colour.SRGB.Linear 
+module Data.Colour.SRGB.Linear
  (Colour, RGB(..)
  ,rgb, toRGB
  ,sRGBGamut
diff --git a/colour.cabal b/colour.cabal
--- a/colour.cabal
+++ b/colour.cabal
@@ -1,5 +1,5 @@
 Name:                colour
-Version:             2.3.4
+Version:             2.3.5
 Cabal-Version:       >= 1.10
 License:             MIT
 License-file:        LICENSE
@@ -13,7 +13,7 @@
                      Colours can be blended and composed.
                      Various colour spaces are supported.
                      A module of colour names ("Data.Colour.Names") is provided.
-Tested-with:         GHC == 8.0.2
+Tested-with:         GHC == 8.6.4
 data-files:          README CHANGELOG
 
 Library
@@ -38,7 +38,7 @@
     type:       exitcode-stdio-1.0
     main-is:    Tests.hs
     build-depends: base >= 4.9 && < 5,
-                   QuickCheck >= 2.5 && < 2.11,
+                   QuickCheck >= 2.5 && < 2.14,
                    random >= 1.0 && < 1.2,
                    test-framework >= 0.8 && < 0.9,
                    test-framework-quickcheck2 >= 0.3 && < 0.4
