diff --git a/IPv6Addr.cabal b/IPv6Addr.cabal
--- a/IPv6Addr.cabal
+++ b/IPv6Addr.cabal
@@ -1,5 +1,5 @@
 name:                IPv6Addr
-version:             1.1.2
+version:             1.1.3
 synopsis:            Library to deal with IPv6 address text representations.
 description:         Library to deal with IPv6 address text representations, canonization and manipulations.
 homepage:            https://github.com/MichelBoucey/IPv6Addr
@@ -7,11 +7,13 @@
 license-file:        LICENSE
 author:              Michel Boucey
 maintainer:          michel.boucey@gmail.com
-copyright:           (c) 2011-2019 - Michel Boucey
+copyright:           (c) 2011-2020 - Michel Boucey
 category:            Network
 build-type:          Simple
 extra-source-files:  README.md
 cabal-version:       >=1.10
+
+Tested-With: GHC ==8.4.3 || ==8.6.5 || ==8.8.1
 
 Source-Repository head
   Type: git
diff --git a/Text/IPv6Addr.hs b/Text/IPv6Addr.hs
--- a/Text/IPv6Addr.hs
+++ b/Text/IPv6Addr.hs
@@ -36,7 +36,7 @@
 import           Data.IP              (IPv6)
 import           Data.List            (elemIndex, elemIndices, group,
                                        intersperse, isSuffixOf)
-import           Data.Maybe           (fromJust, isJust, isNothing)
+import           Data.Maybe           (fromJust, isJust)
 import           Data.Monoid          ((<>))
 import qualified Data.Text            as T
 import qualified Data.Text.Read       as R (decimal)
@@ -161,45 +161,43 @@
 -- > randIPv6AddrWithPrefix (Just "4321:0:1:2:3:4")
 --
 randIPv6AddrWithPrefix :: Maybe T.Text -> IO (Maybe IPv6Addr)
-randIPv6AddrWithPrefix p =
-  if isNothing p
-    then do
-      r   <- randomRIO (1,8)
-      tks <-
-        case r of
+randIPv6AddrWithPrefix Nothing = do
+  r   <- randomRIO (1,8)
+  tks <-
+    case r of
+      8 -> randPartialIPv6Addr 8
+      _ -> do
+        r' <- randomRIO (1,8-r)
+        case r + r' of
+          7 -> concat <$>
+            sequence [ randPartialIPv6Addr r
+                     , pure [Colon,AllZeros,Colon]
+                     , randPartialIPv6Addr r'
+                     ]
           8 -> randPartialIPv6Addr 8
-          _ -> do
-            r' <- randomRIO (1,8-r)
-            case r + r' of
-              7 -> concat <$>
-                sequence [ randPartialIPv6Addr r
-                         , pure [Colon,AllZeros,Colon]
-                         , randPartialIPv6Addr r'
-                         ]
-              8 -> randPartialIPv6Addr 8
-              _ -> concat <$>
-                sequence [ randPartialIPv6Addr r
-                         , pure [DoubleColon]
-                         , randPartialIPv6Addr r'
-                         ]
-      return (ipv6TokensToIPv6Addr tks)
-    else do
-      let mtks = maybeIPv6AddrTokens (fromJust p)
-      guard (isJust mtks)
-      let tks = fromJust mtks
-      ntks <- do
-        let ctks = countChunks tks
-        return $
-          case (snd ctks :: Int) of
-            0 -> 8 - fst ctks
-            1 -> 6 - fst ctks
-            _ -> 0
-      guard (ntks > 0)
-      rtks <- randPartialIPv6Addr ntks
-      let tks' = addColon tks ++ rtks
-      guard (isIPv6Addr tks')
-      return $ ipv6TokensToIPv6Addr $
-        (toDoubleColon . fromDoubleColon) tks'
+          _ -> concat <$>
+            sequence [ randPartialIPv6Addr r
+                     , pure [DoubleColon]
+                     , randPartialIPv6Addr r'
+                     ]
+  return (ipv6TokensToIPv6Addr tks)
+randIPv6AddrWithPrefix (Just p) = do
+  let mtks = maybeIPv6AddrTokens p
+  guard (isJust mtks)
+  let tks = fromJust mtks
+  ntks <- do
+    let ctks = countChunks tks
+    return $
+      case (snd ctks :: Int) of
+        0 -> 8 - fst ctks
+        1 -> 6 - fst ctks
+        _ -> 0
+  guard (ntks > 0)
+  rtks <- randPartialIPv6Addr ntks
+  let tks' = addColon tks ++ rtks
+  guard (isIPv6Addr tks')
+  return $ ipv6TokensToIPv6Addr $
+    (toDoubleColon . fromDoubleColon) tks'
   where
     countChunks =
       foldr go (0,0)
@@ -218,7 +216,7 @@
 
 
 -- ------------------------------------------------------------------------ --
--- Maniplations                                                             --
+-- Manipulations                                                             --
 -- ------------------------------------------------------------------------ --
 
 -- | Returns 'Just' a random 'SixteenBit' token based on a mask \"____\", each
