diff --git a/console-style.cabal b/console-style.cabal
--- a/console-style.cabal
+++ b/console-style.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           console-style
-version:        0.0.2.0
+version:        0.0.2.1
 synopsis:       Styled console text output using ANSI escape sequences.
 description:    Styled console text output using ANSI escape sequences.
 category:       Text, User Interfaces, Monad
@@ -28,10 +28,12 @@
       src
   ghc-options: -Wall
   build-depends:
-      base         >= 4.8  && < 5
+      base         >= 4.8 && < 5
     , transformers >= 0.4 && < 0.6
     , mtl          >= 2.2 && < 2.4
-    , semigroups   >= 0.9  && < 1
+  if impl(ghc < 8.0)
+    build-depends:
+        semigroups >= 0.9 && < 1
   exposed-modules:
       System.Console.Style
   default-language: Haskell2010
diff --git a/src/System/Console/Style.hs b/src/System/Console/Style.hs
--- a/src/System/Console/Style.hs
+++ b/src/System/Console/Style.hs
@@ -88,11 +88,11 @@
   | DullMagenta
   | DullCyan
   | DullWhite
-  | Color256 !Word8               -- ^ Color from 256 color scheme. Color is automatically degraded to 8 colors for older terminals.
-  | RGB      !Word8 !Word8 !Word8 -- ^ True color. Color is automatically degraded to 256 or 8 colors for older terminals.
+  | Color256 !Word8               -- ^ Color from 256 color scheme. Color is automatically reduced to 8 colors for less capable terminals.
+  | RGB      !Word8 !Word8 !Word8 -- ^ True color. Color is automatically reduced to 256 or 8 colors for less capable terminals.
   deriving (Eq, Ord, Show)
 
--- | Terminal type. For older terminals the style is automatically degraded.
+-- | Terminal type. For less capable terminals the color depth is automatically reduced.
 data Term
   = TermDumb -- ^ Dumb terminal - no color output
   | Term8    -- ^ 8 colors supported
@@ -163,7 +163,7 @@
 -- TODO improve this
 envToTerm :: String -> Term
 envToTerm "dumb" = TermDumb
-envToTerm term | any (flip isPrefixOf term) rgbTerminals = TermRGB
+envToTerm term | any (`isPrefixOf` term) rgbTerminals = TermRGB
                | "256" `isInfixOf` term = Term256
                | otherwise = Term8
   where rgbTerminals = ["xterm", "konsole", "gnome", "st", "linux"]
@@ -293,7 +293,7 @@
 reduceColor _        = id
 
 rgbToWord8 :: Word8 -> Word8 -> Word8 -> Word8 -> Word8 -> Word8
-rgbToWord8 base q r g b = base * (base * (b `div` q) + (g `div` q)) + (r `div` q)
+rgbToWord8 base q r g b = base * (base * (r `div` q) + (g `div` q)) + (b `div` q)
 
 gray24ToANSI :: Word8 -> Color
 gray24ToANSI x
@@ -304,8 +304,8 @@
 
 color216ToANSI :: Word8 -> Color
 color216ToANSI x = rgbToANSI 3 r g b
-  where (b,gr) = divMod x 36
-        (g,r)  = divMod gr 6
+  where (r,gb) = divMod x 36
+        (g,b)  = divMod gb 6
 
 color16ToANSI :: Word8 -> Color
 color16ToANSI 0  = DullBlack
@@ -332,7 +332,7 @@
         bi = fromIntegral b
 
 rgbToANSI :: Word8 -> Word8 -> Word8 -> Word8 -> Color
-rgbToANSI q r g b = color16ToANSI $ bool 0 8 (squareNorm r g b >= squareNorm q q q) + rgbToWord8 2 q r g b
+rgbToANSI q r g b = color16ToANSI $ bool 0 8 (squareNorm r g b >= squareNorm q q q) + rgbToWord8 2 q b g r
 
 reduceColor8 :: Color -> Color
 reduceColor8 (Color256 x)
