packages feed

Color-0.2.0: tests/Graphics/Color/Standard/RALSpec.hs

{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Graphics.Color.Standard.RALSpec (spec) where

import Control.Monad (zipWithM_, unless, when)
import Data.Kind
import GHC.TypeLits
import Graphics.Color.Model.Common hiding ((.&.))
import Graphics.Color.Space
import Graphics.Color.Space.RGB
import Graphics.Color.Standard.RAL as RAL
import Graphics.Color.Space.CIE1976.LAB
import Data.Bits


spec :: Spec
spec = do
  describe "RAL" $ do
    let ralsLAB = [(n, c) | (n, c, _) <- ralColors] :: [(String, Color (LAB D50) Float)]
        ralColors' :: ColorSpace cs i e => [(String, Color cs e)]
        ralColors' = [(n, c) | (n, c, d) <- ralColors, not d]
        matchColor (ename, expected) (rname, received) =
          unless (received == expected) $
          expectationFailure $
          concat
            [ "Recieved color: "
            , rname
            , " did not match the one produced by matching function: '"
            , ename
            , "': "
            , show received
            , " /= "
            , show expected
            ]
        specMatchLists pendingNames expect expectedColors receivedColors = do
          it "Lists have the same length" $ expectSameLength expectedColors receivedColors
          let mkTest expected (rname, received) =
                it rname $ do
                  when (rname `elem` pendingNames) $ pendingWith "Some discrepancy"
                  (expect received expected)
          zipWithM_ mkTest expectedColors receivedColors
    it "Color ShowS" $ do
      show (RAL :: RAL "GreenBeige") `shouldBe` "RAL \"GreenBeige\""
      show (Just (RAL :: RAL "GreenBeige")) `shouldBe` "Just (RAL \"GreenBeige\")"
    it "Color code matches" $ matchListsWith matchColor ralsLAB (toColorRAL ralColorCodes)
    it "Color name matches" $ matchListsWith matchColor ralsLAB (toColorRAL ralColorNames)
    let (srgbs, _hsls, _cmyks) = unzip3 ralAlternatives
    describe "Matches sRGB" $
      specMatchLists ["luminousBrightOrange", "pastelGreen"] shouldBe srgbs ralColors'
    -- xdescribe "Matches CMYK" $ specMatchLists [] shouldBe cmyks ralColors'
    -- xdescribe "Matches HSL" $ specMatchLists [] shouldBe hsls ralColors'



data HList (as :: [Type]) where
  HNil :: HList '[]
  (:>) :: a -> HList as -> HList (a ': as)

infixr 5 :>

class FromColorsRAL (xs :: [Type]) where
  toColorRAL :: ColorSpace cs i e => HList xs -> [(String, Color cs e)]

instance FromColorsRAL '[] where
  toColorRAL _ = []

instance (KnownNat code, StandardColor RAL code, FromColorsRAL xs) =>
         FromColorsRAL (RAL (code :: Nat) ': xs) where
  toColorRAL (c :> cs) = (show c, color c) : toColorRAL cs

instance (KnownSymbol name, StandardColor RAL name, FromColorsRAL xs) =>
         FromColorsRAL (RAL (name :: Symbol) ': xs) where
  toColorRAL (c :> cs) = (show c, color c) : toColorRAL cs


ralColorNames ::
  HList
  '[ RAL "Green beige"
   , RAL "Beige"
   , RAL "Sand yellow"
   , RAL "Signal yellow"
   , RAL "Golden yellow"
   , RAL "Honey yellow"
   , RAL "Maize yellow"
   , RAL "Daffodil yellow"
   , RAL "Brown beige"
   , RAL "Lemon yellow"
   , RAL "Oyster white"
   , RAL "Ivory"
   , RAL "Light ivory"
   , RAL "Sulfur yellow"
   , RAL "Saffron yellow"
   , RAL "Zinc yellow"
   , RAL "Grey beige"
   , RAL "Olive yellow"
   , RAL "Rape yellow"
   , RAL "Traffic yellow"
   , RAL "Ochre yellow"
   , RAL "Luminous yellow"
   , RAL "Curry yellow"
   , RAL "Melon yellow"
   , RAL "Broom yellow"
   , RAL "Dahlia yellow"
   , RAL "Pastel yellow"
   , RAL "Pearl beige"
   , RAL "Pearl gold"
   , RAL "Sun yellow"
   , RAL "Yellow orange"
   , RAL "Red orange"
   , RAL "Vermilion"
   , RAL "Pastel orange"
   , RAL "Pure orange"
   , RAL "Luminous orange"
   , RAL "Luminous bright orange"
   , RAL "Bright red orange"
   , RAL "Traffic orange"
   , RAL "Signal orange"
   , RAL "Deep orange"
   , RAL "Salmon orange"
   , RAL "Pearl orange"
   , RAL "Flame red"
   , RAL "Signal red"
   , RAL "Carmine red"
   , RAL "Ruby red"
   , RAL "Purple red"
   , RAL "Wine red"
   , RAL "Black red"
   , RAL "Oxide red"
   , RAL "Brown red"
   , RAL "Beige red"
   , RAL "Tomato red"
   , RAL "Antique pink"
   , RAL "Light pink"
   , RAL "Coral red"
   , RAL "Rose"
   , RAL "Strawberry red"
   , RAL "Traffic red"
   , RAL "Salmon pink"
   , RAL "Luminous red"
   , RAL "Luminous bright red"
   , RAL "Raspberry red"
   , RAL "Pure red"
   , RAL "Orient red"
   , RAL "Pearl ruby red"
   , RAL "Pearl pink"
   , RAL "Red lilac"
   , RAL "Red violet"
   , RAL "Heather violet"
   , RAL "Claret violet"
   , RAL "Blue lilac"
   , RAL "Traffic purple"
   , RAL "Purple violet"
   , RAL "Signal violet"
   , RAL "Pastel violet"
   , RAL "Telemagenta"
   , RAL "Pearl violet"
   , RAL "Pearl blackberry"
   , RAL "Violet blue"
   , RAL "Green blue"
   , RAL "Ultramarine blue"
   , RAL "Sapphire blue"
   , RAL "Black blue"
   , RAL "Signal blue"
   , RAL "Brilliant blue"
   , RAL "Grey blue"
   , RAL "Azure blue"
   , RAL "Gentian blue"
   , RAL "Steel blue"
   , RAL "Light blue"
   , RAL "Cobalt blue"
   , RAL "Pigeon blue"
   , RAL "Sky blue"
   , RAL "Traffic blue"
   , RAL "Turquoise blue"
   , RAL "Capri blue"
   , RAL "Ocean blue"
   , RAL "Water blue"
   , RAL "Night blue"
   , RAL "Distant blue"
   , RAL "Pastel blue"
   , RAL "Pearl gentian blue"
   , RAL "Pearl night blue"
   , RAL "Patina green"
   , RAL "Emerald green"
   , RAL "Leaf green"
   , RAL "Olive green"
   , RAL "Blue green"
   , RAL "Moss green"
   , RAL "Grey olive"
   , RAL "Bottle green"
   , RAL "Brown green"
   , RAL "Fir green"
   , RAL "Grass green"
   , RAL "Reseda green"
   , RAL "Black green"
   , RAL "Reed green"
   , RAL "Yellow olive"
   , RAL "Black olive"
   , RAL "Turquoise green"
   , RAL "May green"
   , RAL "Yellow green"
   , RAL "Pastel green"
   , RAL "Chrome green"
   , RAL "Pale green"
   , RAL "Olive-drab"
   , RAL "Brown olive"
   , RAL "Traffic green"
   , RAL "Fern green"
   , RAL "Opal green"
   , RAL "Light green"
   , RAL "Pine green"
   , RAL "Mint green"
   , RAL "Signal green"
   , RAL "Mint turquoise"
   , RAL "Pastel turquoise"
   , RAL "Pearl green"
   , RAL "Pearl opal green"
   , RAL "Pure green"
   , RAL "Luminous green"
   , RAL "Squirrel grey"
   , RAL "Silver grey"
   , RAL "Olive grey"
   , RAL "Moss grey"
   , RAL "Signal grey"
   , RAL "Mouse grey"
   , RAL "Beige grey"
   , RAL "Khaki grey"
   , RAL "Green grey"
   , RAL "Tarpaulin grey"
   , RAL "Iron grey"
   , RAL "Basalt grey"
   , RAL "Brown grey"
   , RAL "NATO olive"
   , RAL "Slate grey"
   , RAL "Anthracite grey"
   , RAL "Black grey"
   , RAL "Umbra grey"
   , RAL "Concrete grey"
   , RAL "Graphite grey"
   , RAL "Granite grey"
   , RAL "Stone grey"
   , RAL "Blue grey"
   , RAL "Pebble grey"
   , RAL "Cement grey"
   , RAL "Yellow grey"
   , RAL "Light grey"
   , RAL "Platinum grey"
   , RAL "Dusty grey"
   , RAL "Agate grey"
   , RAL "Quartz grey"
   , RAL "Window grey"
   , RAL "Traffic grey A"
   , RAL "Traffic grey B"
   , RAL "Silk grey"
   , RAL "Telegrey 1"
   , RAL "Telegrey 2"
   , RAL "Telegrey 4"
   , RAL "Pearl mouse grey"
   , RAL "Green brown"
   , RAL "Ochre brown"
   , RAL "Signal brown"
   , RAL "Clay brown"
   , RAL "Copper brown"
   , RAL "Fawn brown"
   , RAL "Olive brown"
   , RAL "Nut brown"
   , RAL "Red brown"
   , RAL "Sepia brown"
   , RAL "Chestnut brown"
   , RAL "Mahogany brown"
   , RAL "Chocolate brown"
   , RAL "Grey brown"
   , RAL "Black brown"
   , RAL "Orange brown"
   , RAL "Beige brown"
   , RAL "Pale brown"
   , RAL "Terra brown"
   , RAL "Pearl copper"
   , RAL "Cream"
   , RAL "Grey white"
   , RAL "Signal white"
   , RAL "Signal black"
   , RAL "Jet black"
   , RAL "White aluminium"
   , RAL "Grey aluminium"
   , RAL "Pure white"
   , RAL "Graphite black"
   , RAL "Traffic white"
   , RAL "Traffic black"
   , RAL "Papyrus white"
   , RAL "Pearl light grey"
   , RAL "Pearl dark grey"
   ]
ralColorNames =
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  HNil


ralColorCodes ::
  HList
  '[ RAL 1000
   , RAL 1001
   , RAL 1002
   , RAL 1003
   , RAL 1004
   , RAL 1005
   , RAL 1006
   , RAL 1007
   , RAL 1011
   , RAL 1012
   , RAL 1013
   , RAL 1014
   , RAL 1015
   , RAL 1016
   , RAL 1017
   , RAL 1018
   , RAL 1019
   , RAL 1020
   , RAL 1021
   , RAL 1023
   , RAL 1024
   , RAL 1026
   , RAL 1027
   , RAL 1028
   , RAL 1032
   , RAL 1033
   , RAL 1034
   , RAL 1035
   , RAL 1036
   , RAL 1037
   , RAL 2000
   , RAL 2001
   , RAL 2002
   , RAL 2003
   , RAL 2004
   , RAL 2005
   , RAL 2007
   , RAL 2008
   , RAL 2009
   , RAL 2010
   , RAL 2011
   , RAL 2012
   , RAL 2013
   , RAL 3000
   , RAL 3001
   , RAL 3002
   , RAL 3003
   , RAL 3004
   , RAL 3005
   , RAL 3007
   , RAL 3009
   , RAL 3011
   , RAL 3012
   , RAL 3013
   , RAL 3014
   , RAL 3015
   , RAL 3016
   , RAL 3017
   , RAL 3018
   , RAL 3020
   , RAL 3022
   , RAL 3024
   , RAL 3026
   , RAL 3027
   , RAL 3028
   , RAL 3031
   , RAL 3032
   , RAL 3033
   , RAL 4001
   , RAL 4002
   , RAL 4003
   , RAL 4004
   , RAL 4005
   , RAL 4006
   , RAL 4007
   , RAL 4008
   , RAL 4009
   , RAL 4010
   , RAL 4011
   , RAL 4012
   , RAL 5000
   , RAL 5001
   , RAL 5002
   , RAL 5003
   , RAL 5004
   , RAL 5005
   , RAL 5007
   , RAL 5008
   , RAL 5009
   , RAL 5010
   , RAL 5011
   , RAL 5012
   , RAL 5013
   , RAL 5014
   , RAL 5015
   , RAL 5017
   , RAL 5018
   , RAL 5019
   , RAL 5020
   , RAL 5021
   , RAL 5022
   , RAL 5023
   , RAL 5024
   , RAL 5025
   , RAL 5026
   , RAL 6000
   , RAL 6001
   , RAL 6002
   , RAL 6003
   , RAL 6004
   , RAL 6005
   , RAL 6006
   , RAL 6007
   , RAL 6008
   , RAL 6009
   , RAL 6010
   , RAL 6011
   , RAL 6012
   , RAL 6013
   , RAL 6014
   , RAL 6015
   , RAL 6016
   , RAL 6017
   , RAL 6018
   , RAL 6019
   , RAL 6020
   , RAL 6021
   , RAL 6022
   , RAL 6022 -- Synonym: Brown olive
   , RAL 6024
   , RAL 6025
   , RAL 6026
   , RAL 6027
   , RAL 6028
   , RAL 6029
   , RAL 6032
   , RAL 6033
   , RAL 6034
   , RAL 6035
   , RAL 6036
   , RAL 6037
   , RAL 6038
   , RAL 7000
   , RAL 7001
   , RAL 7002
   , RAL 7003
   , RAL 7004
   , RAL 7005
   , RAL 7006
   , RAL 7008
   , RAL 7009
   , RAL 7010
   , RAL 7011
   , RAL 7012
   , RAL 7013
   , RAL 7013
   , RAL 7015
   , RAL 7016
   , RAL 7021
   , RAL 7022
   , RAL 7023
   , RAL 7024
   , RAL 7026
   , RAL 7030
   , RAL 7031
   , RAL 7032
   , RAL 7033
   , RAL 7034
   , RAL 7035
   , RAL 7036
   , RAL 7037
   , RAL 7038
   , RAL 7039
   , RAL 7040
   , RAL 7042
   , RAL 7043
   , RAL 7044
   , RAL 7045
   , RAL 7046
   , RAL 7047
   , RAL 7048
   , RAL 8000
   , RAL 8001
   , RAL 8002
   , RAL 8003
   , RAL 8004
   , RAL 8007
   , RAL 8008
   , RAL 8011
   , RAL 8012
   , RAL 8014
   , RAL 8015
   , RAL 8016
   , RAL 8017
   , RAL 8019
   , RAL 8022
   , RAL 8023
   , RAL 8024
   , RAL 8025
   , RAL 8028
   , RAL 8029
   , RAL 9001
   , RAL 9002
   , RAL 9003
   , RAL 9004
   , RAL 9005
   , RAL 9006
   , RAL 9007
   , RAL 9010
   , RAL 9011
   , RAL 9016
   , RAL 9017
   , RAL 9018
   , RAL 9022
   , RAL 9023
   ]
ralColorCodes =
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  RAL :>
  HNil

-- Duplicates are marked by the boolean true.
ralColors :: ColorSpace cs i e => [(String, Color cs e, Bool)]
ralColors =
  [ ("greenBeige", greenBeige, False)
  , ("beige", beige, False)
  , ("sandYellow", sandYellow, False)
  , ("signalYellow", signalYellow, False)
  , ("goldenYellow", goldenYellow, False)
  , ("honeyYellow", honeyYellow, False)
  , ("maizeYellow", maizeYellow, False)
  , ("daffodilYellow", daffodilYellow, False)
  , ("brownBeige", brownBeige, False)
  , ("lemonYellow", lemonYellow, False)
  , ("oysterWhite", oysterWhite, False)
  , ("ivory", ivory, False)
  , ("lightIvory", lightIvory, False)
  , ("sulfurYellow", sulfurYellow, False)
  , ("saffronYellow", saffronYellow, False)
  , ("zincYellow", zincYellow, False)
  , ("greyBeige", greyBeige, False)
  , ("oliveYellow", oliveYellow, False)
  , ("rapeYellow", rapeYellow, False)
  , ("trafficYellow", trafficYellow, False)
  , ("ochreYellow", ochreYellow, False)
  , ("luminousYellow", luminousYellow, False)
  , ("curryYellow", curryYellow, False)
  , ("melonYellow", melonYellow, False)
  , ("broomYellow", broomYellow, False)
  , ("dahliaYellow", dahliaYellow, False)
  , ("pastelYellow", pastelYellow, False)
  , ("pearlBeige", pearlBeige, False)
  , ("pearlGold", pearlGold, False)
  , ("sunYellow", sunYellow, False)
  , ("yellowOrange", yellowOrange, False)
  , ("redOrange", redOrange, False)
  , ("vermilion", vermilion, False)
  , ("pastelOrange", pastelOrange, False)
  , ("pureOrange", pureOrange, False)
  , ("luminousOrange", luminousOrange, False)
  , ("luminousBrightOrange", luminousBrightOrange, False)
  , ("brightRedOrange", brightRedOrange, False)
  , ("trafficOrange", trafficOrange, False)
  , ("signalOrange", signalOrange, False)
  , ("deepOrange", deepOrange, False)
  , ("salmonOrange", salmonOrange, False)
  , ("pearlOrange", pearlOrange, False)
  , ("flameRed", flameRed, False)
  , ("signalRed", signalRed, False)
  , ("carmineRed", carmineRed, False)
  , ("rubyRed", rubyRed, False)
  , ("purpleRed", purpleRed, False)
  , ("wineRed", wineRed, False)
  , ("blackRed", blackRed, False)
  , ("oxideRed", oxideRed, False)
  , ("brownRed", brownRed, False)
  , ("beigeRed", beigeRed, False)
  , ("tomatoRed", tomatoRed, False)
  , ("antiquePink", antiquePink, False)
  , ("lightPink", lightPink, False)
  , ("coralRed", coralRed, False)
  , ("rose", rose, False)
  , ("strawberryRed", strawberryRed, False)
  , ("trafficRed", trafficRed, False)
  , ("salmonPink", salmonPink, False)
  , ("luminousRed", luminousRed, False)
  , ("luminousBrightRed", luminousBrightRed, False)
  , ("raspberryRed", raspberryRed, False)
  , ("pureRed", pureRed, False)
  , ("orientRed", orientRed, False)
  , ("pearlRubyRed", pearlRubyRed, False)
  , ("pearlPink", pearlPink, False)
  , ("redLilac", redLilac, False)
  , ("redViolet", redViolet, False)
  , ("heatherViolet", heatherViolet, False)
  , ("claretViolet", claretViolet, False)
  , ("blueLilac", blueLilac, False)
  , ("trafficPurple", trafficPurple, False)
  , ("purpleViolet", purpleViolet, False)
  , ("signalViolet", signalViolet, False)
  , ("pastelViolet", pastelViolet, False)
  , ("telemagenta", telemagenta, False)
  , ("pearlViolet", pearlViolet, False)
  , ("pearlBlackberry", pearlBlackberry, False)
  , ("violetBlue", violetBlue, False)
  , ("greenBlue", greenBlue, False)
  , ("ultramarineBlue", ultramarineBlue, False)
  , ("sapphireBlue", sapphireBlue, False)
  , ("blackBlue", blackBlue, False)
  , ("signalBlue", signalBlue, False)
  , ("brilliantBlue", brilliantBlue, False)
  , ("greyBlue", greyBlue, False)
  , ("azureBlue", azureBlue, False)
  , ("gentianBlue", gentianBlue, False)
  , ("steelBlue", steelBlue, False)
  , ("lightBlue", lightBlue, False)
  , ("cobaltBlue", cobaltBlue, False)
  , ("pigeonBlue", pigeonBlue, False)
  , ("skyBlue", skyBlue, False)
  , ("trafficBlue", trafficBlue, False)
  , ("turquoiseBlue", turquoiseBlue, False)
  , ("capriBlue", capriBlue, False)
  , ("oceanBlue", oceanBlue, False)
  , ("waterBlue", waterBlue, False)
  , ("nightBlue", nightBlue, False)
  , ("distantBlue", distantBlue, False)
  , ("pastelBlue", pastelBlue, False)
  , ("pearlGentianBlue", pearlGentianBlue, False)
  , ("pearlNightBlue", pearlNightBlue, False)
  , ("patinaGreen", patinaGreen, False)
  , ("emeraldGreen", emeraldGreen, False)
  , ("leafGreen", leafGreen, False)
  , ("oliveGreen", oliveGreen, False)
  , ("blueGreen", blueGreen, False)
  , ("mossGreen", mossGreen, False)
  , ("greyOlive", greyOlive, False)
  , ("bottleGreen", bottleGreen, False)
  , ("brownGreen", brownGreen, False)
  , ("firGreen", firGreen, False)
  , ("grassGreen", grassGreen, False)
  , ("resedaGreen", resedaGreen, False)
  , ("blackGreen", blackGreen, False)
  , ("reedGreen", reedGreen, False)
  , ("yellowOlive", yellowOlive, False)
  , ("blackOlive", blackOlive, False)
  , ("turquoiseGreen", turquoiseGreen, False)
  , ("mayGreen", mayGreen, False)
  , ("yellowGreen", yellowGreen, False)
  , ("pastelGreen", pastelGreen, False)
  , ("chromeGreen", chromeGreen, False)
  , ("paleGreen", paleGreen, False)
  , ("oliveDrab", oliveDrab, False)
  , ("brownOlive", oliveDrab, True)
  , ("trafficGreen", trafficGreen, False)
  , ("fernGreen", fernGreen, False)
  , ("opalGreen", opalGreen, False)
  , ("lightGreen", lightGreen, False)
  , ("pineGreen", pineGreen, False)
  , ("mintGreen", mintGreen, False)
  , ("signalGreen", signalGreen, False)
  , ("mintTurquoise", mintTurquoise, False)
  , ("pastelTurquoise", pastelTurquoise, False)
  , ("pearlGreen", pearlGreen, False)
  , ("pearlOpalGreen", pearlOpalGreen, False)
  , ("pureGreen", pureGreen, False)
  , ("luminousGreen", luminousGreen, False)
  , ("squirrelGrey", squirrelGrey, False)
  , ("silverGrey", silverGrey, False)
  , ("oliveGrey", oliveGrey, False)
  , ("mossGrey", mossGrey, False)
  , ("signalGrey", signalGrey, False)
  , ("mouseGrey", mouseGrey, False)
  , ("beigeGrey", beigeGrey, False)
  , ("khakiGrey", khakiGrey, False)
  , ("greenGrey", greenGrey, False)
  , ("tarpaulinGrey", tarpaulinGrey, False)
  , ("ironGrey", ironGrey, False)
  , ("basaltGrey", basaltGrey, False)
  , ("brownGrey", brownGrey, False)
  , ("brownGrey", brownGrey, True) -- Alt: NATO olive
  , ("slateGrey", slateGrey, False)
  , ("anthraciteGrey", anthraciteGrey, False)
  , ("blackGrey", blackGrey, False)
  , ("umbraGrey", umbraGrey, False)
  , ("concreteGrey", concreteGrey, False)
  , ("graphiteGrey", graphiteGrey, False)
  , ("graniteGrey", graniteGrey, False)
  , ("stoneGrey", stoneGrey, False)
  , ("blueGrey", blueGrey, False)
  , ("pebbleGrey", pebbleGrey, False)
  , ("cementGrey", cementGrey, False)
  , ("yellowGrey", yellowGrey, False)
  , ("lightGrey", lightGrey, False)
  , ("platinumGrey", platinumGrey, False)
  , ("dustyGrey", dustyGrey, False)
  , ("agateGrey", agateGrey, False)
  , ("quartzGrey", quartzGrey, False)
  , ("windowGrey", windowGrey, False)
  , ("trafficGreyA", trafficGreyA, False)
  , ("trafficGreyB", trafficGreyB, False)
  , ("silkGrey", silkGrey, False)
  , ("telegrey1", telegrey1, False)
  , ("telegrey2", telegrey2, False)
  , ("telegrey4", telegrey4, False)
  , ("pearlMouseGrey", pearlMouseGrey, False)
  , ("greenBrown", greenBrown, False)
  , ("ochreBrown", ochreBrown, False)
  , ("signalBrown", signalBrown, False)
  , ("clayBrown", clayBrown, False)
  , ("copperBrown", copperBrown, False)
  , ("fawnBrown", fawnBrown, False)
  , ("oliveBrown", oliveBrown, False)
  , ("nutBrown", nutBrown, False)
  , ("redBrown", redBrown, False)
  , ("sepiaBrown", sepiaBrown, False)
  , ("chestnutBrown", chestnutBrown, False)
  , ("mahoganyBrown", mahoganyBrown, False)
  , ("chocolateBrown", chocolateBrown, False)
  , ("greyBrown", greyBrown, False)
  , ("blackBrown", blackBrown, False)
  , ("orangeBrown", orangeBrown, False)
  , ("beigeBrown", beigeBrown, False)
  , ("paleBrown", paleBrown, False)
  , ("terraBrown", terraBrown, False)
  , ("pearlCopper", pearlCopper, False)
  , ("cream", cream, False)
  , ("greyWhite", greyWhite, False)
  , ("signalWhite", signalWhite, False)
  , ("signalBlack", signalBlack, False)
  , ("jetBlack", jetBlack, False)
  , ("whiteAluminium", whiteAluminium, False)
  , ("greyAluminium", greyAluminium, False)
  , ("pureWhite", pureWhite, False)
  , ("graphiteBlack", graphiteBlack, False)
  , ("trafficWhite", trafficWhite, False)
  , ("trafficBlack", trafficBlack, False)
  , ("papyrusWhite", papyrusWhite, False)
  , ("pearlLightGrey", pearlLightGrey, False)
  , ("pearlDarkGrey", pearlDarkGrey, False)
  ]


ralAlternatives ::
     [( Color (SRGB 'NonLinear) Word8
      , Color (HSL (SRGB 'NonLinear)) Float
      , Color (CMYK (SRGB 'NonLinear)) Word8)]
ralAlternatives =
  [ (ColorRGB r g b, ColorH360SL h (s / 100) (l / 100), ColorCMYK c m y k)
  | (_y', r, g, b, h, s, l, c, m, y, k) <- ralAlternativeRaw
  ]
  where
    ralAlternativeRaw ::
         [(Float, Word8, Word8, Word8, Float, Float, Float, Word8, Word8, Word8, Word8)]
    ralAlternativeRaw =
      [ (186.29, 201, 187, 136, 47.08, 37.57, 66.08, 0, 7, 32, 21)
      , (178.7, 204, 176, 131, 36.99, 41.71, 65.69, 0, 14, 36, 20)
      , (173.04, 205, 170, 109, 38.13, 48.98, 61.57, 0, 17, 47, 20)
      , (172.32, 242, 169, 0, 41.90, 100, 47.45, 0, 30, 100, 5)
      , (160.7, 221, 159, 0, 43.17, 100, 43.33, 0, 28, 100, 13)
      , (144.16, 197, 143, 0, 43.55, 100, 38.63, 0, 27, 100, 23)
      , (150.26, 219, 145, 0, 39.73, 100, 42.94, 0, 34, 100, 14)
      , (148.89, 226, 141, 0, 37.43, 100, 44.31, 0, 38, 100, 11)
      , (134.32, 171, 129, 79, 32.61, 36.8, 49.02, 0, 25, 54, 33)
      , (174.04, 214, 176, 37, 47.12, 70.52, 49.22, 0, 18, 83, 16)
      , (218.12, 225, 218, 199, 43.85, 30.23, 83.14, 0, 3, 12, 12)
      , (198.15, 217, 197, 154, 40.95, 45.32, 72.75, 0, 9, 29, 15)
      , (212.24, 227, 211, 181, 39.13, 45.1, 80, 0, 7, 20, 11)
      , (211.92, 232, 222, 53, 56.65, 79.56, 55.88, 0, 4, 77, 9)
      , (178.38, 240, 170, 80, 33.75, 84.21, 62.75, 0, 29, 67, 6)
      , (199.96, 242, 203, 46, 48.06, 88.29, 56.47, 0, 16, 81, 5)
      , (145.52, 162, 143, 122, 31.50, 17.7, 55.69, 0, 12, 25, 36)
      , (142.94, 157, 143, 101, 45, 22.22, 50.59, 0, 9, 36, 38)
      , (181.48, 238, 183, 0, 46.13, 100, 46.67, 0, 23, 100, 7)
      , (181.69, 239, 183, 0, 45.94, 100, 46.86, 0, 23, 100, 6)
      , (146.88, 181, 144, 75, 39.06, 41.73, 50.2, 0, 20, 59, 29)
      , (236.59, 255, 255, 0, 0.17, 100, 50, 0, 0, 100, 0)
      , (126.85, 162, 128, 12, 46.40, 86.21, 34.12, 0, 21, 93, 36)
      , (165.78, 255, 156, 0, 0.10, 100, 50, 0, 39, 100, 0)
      , (163.85, 219, 164, 0, 44.93, 100, 42.94, 0, 25, 100, 14)
      , (164.47, 243, 155, 27, 35.56, 90, 52.94, 0, 36, 89, 5)
      , (167.03, 230, 157, 81, 30.60, 74.87, 60.98, 0, 32, 65, 10)
      , (131.97, 142, 131, 112, 38, 11.81, 49.8, 0, 8, 21, 44)
      , (103.36, 125, 101, 63, 36.77, 32.98, 36.86, 0, 19, 50, 51)
      , (154.88, 234, 147, 0, 37.69, 100, 45.88, 0, 37, 100, 8)
      , (124.67, 213, 111, 0, 31.27, 100, 41.76, 0, 48, 100, 16)
      , (92.21, 182, 72, 28, 17.14, 73.33, 41.18, 0, 60, 85, 29)
      , (82.55, 188, 56, 35, 8.24, 68.61, 43.73, 0, 70, 81, 26)
      , (140.02, 241, 120, 41, 23.70, 87.72, 55.29, 0, 50, 83, 5)
      , (106.99, 222, 83, 6, 21.39, 94.74, 44.71, 0, 63, 97, 13)
      , (109.08, 255, 75, 17, 14.62, 100, 53.33, 0, 71, 93, 0)
      , (185.09, 255, 183, 0, 0.12, 100, 50, 0, 28, 100, 0)
      , (128.3, 232, 107, 34, 22.12, 81.15, 52.16, 0, 54, 85, 9)
      , (106.43, 218, 83, 10, 21.06, 91.23, 44.71, 0, 62, 95, 15)
      , (112.84, 204, 93, 41, 19.14, 66.53, 48.04, 0, 54, 80, 20)
      , (126.74, 221, 110, 15, 27.67, 87.29, 46.27, 0, 50, 93, 13)
      , (122.3, 209, 101, 78, 10.53, 58.74, 56.27, 0, 52, 63, 18)
      , (77.49, 143, 62, 38, 13.71, 58.01, 35.49, 0, 57, 73, 44)
      , (65.86, 164, 40, 33, 3.21, 66.5, 38.63, 0, 76, 80, 36)
      , (59.87, 152, 35, 35, 0, 62.57, 36.67, 0, 77, 77, 40)
      , (59.09, 152, 34, 34, 0, 63.44, 36.47, 0, 78, 78, 40)
      , (48.4, 132, 25, 34, 354.95, 68.15, 30.78, 0, 81, 74, 48)
      , (44.16, 105, 27, 35, 353.85, 59.09, 25.88, 0, 74, 67, 59)
      , (38.11, 88, 24, 31, 353.44, 57.14, 21.96, 0, 73, 65, 65)
      , (38.31, 61, 32, 34, 355.86, 31.18, 18.24, 0, 48, 44, 76)
      , (58.98, 102, 48, 41, 6.89, 42.66, 28.04, 0, 53, 60, 60)
      , (53.65, 119, 36, 36, 0, 53.55, 30.39, 0, 70, 70, 53)
      , (144.24, 194, 133, 109, 16.94, 41.06, 59.41, 0, 31, 44, 24)
      , (67.25, 149, 46, 37, 4.82, 60.22, 36.47, 0, 69, 75, 42)
      , (133.43, 201, 115, 117, 358.60, 44.33, 61.96, 0, 43, 42, 21)
      , (172.13, 215, 160, 166, 353.45, 40.74, 73.53, 0, 26, 23, 16)
      , (81.24, 164, 60, 48, 6.21, 54.72, 41.57, 0, 63, 71, 36)
      , (109.31, 200, 84, 93, 355.34, 51.33, 55.69, 0, 58, 53, 22)
      , (91.35, 196, 62, 74, 354.63, 53.17, 50.59, 0, 68, 62, 23)
      , (61.23, 184, 29, 19, 3.64, 81.28, 39.8, 0, 84, 90, 28)
      , (124.6, 204, 105, 85, 10.08, 53.85, 56.67, 0, 49, 58, 20)
      , (86.85, 255, 42, 36, 1.64, 100, 57.06, 0, 84, 86, 0)
      , (83.7, 255, 38, 32, 1.61, 100, 56.27, 0, 85, 87, 0)
      , (67.51, 169, 38, 61, 349.47, 63.29, 40.59, 0, 78, 64, 34)
      , (76.23, 201, 43, 38, 1.84, 68.2, 46.86, 0, 79, 81, 21)
      , (75.38, 164, 51, 56, 357.35, 52.56, 42.16, 0, 69, 66, 36)
      , (46.01, 110, 28, 36, 354.15, 59.42, 27.06, 0, 75, 67, 57)
      , (78.53, 162, 57, 46, 5.69, 55.77, 40.78, 0, 65, 72, 36)
      , (105.97, 131, 96, 131, 0.83, 15.42, 44.51, 0, 27, 0, 49)
      , (78.09, 140, 60, 75, 348.75, 40, 39.22, 0, 57, 46, 45)
      , (120.44, 196, 96, 140, 333.60, 45.87, 57.25, 0, 51, 29, 23)
      , (46.12, 100, 29, 57, 336.34, 55.04, 25.29, 0, 71, 43, 61)
      , (110.93, 123, 103, 154, 263.53, 20.16, 50.39, 20, 33, 0, 40)
      , (73.46, 145, 48, 115, 318.56, 50.26, 37.84, 0, 67, 21, 43)
      , (45.17, 71, 36, 60, 318.86, 32.71, 20.98, 0, 49, 15, 72)
      , (91.8, 135, 75, 131, 304, 28.57, 41.18, 0, 44, 3, 47)
      , (139.04, 157, 133, 146, 327.50, 10.91, 56.86, 0, 15, 7, 38)
      , (92.69, 187, 62, 119, 332.64, 50.2, 48.82, 0, 67, 36, 27)
      , (103.86, 113, 98, 135, 264.32, 15.88, 45.69, 16, 27, 0, 47)
      , (108.87, 109, 107, 127, 246, 8.55, 45.88, 14, 16, 0, 50)
      , (75.71, 56, 78, 111, 216, 32.93, 32.75, 50, 30, 0, 56)
      , (67.74, 29, 76, 100, 200.28, 55.04, 25.29, 71, 24, 0, 61)
      , (53.88, 30, 54, 123, 224.52, 60.78, 30, 76, 56, 0, 52)
      , (54.27, 38, 56, 85, 217.02, 38.21, 24.12, 55, 34, 0, 67)
      , (29.87, 26, 30, 40, 222.86, 21.21, 12.94, 35, 25, 0, 84)
      , (67.68, 0, 81, 135, 204, 100, 26.47, 100, 40, 0, 47)
      , (99.95, 66, 106, 140, 207.57, 35.92, 40.39, 53, 24, 0, 45)
      , (55.96, 45, 58, 68, 206.09, 20.35, 22.16, 34, 15, 0, 73)
      , (85.46, 45, 94, 120, 200.80, 45.45, 32.35, 62, 22, 0, 53)
      , (64.74, 0, 78, 124, 202.26, 100, 24.31, 100, 37, 0, 51)
      , (41.54, 30, 43, 61, 214.84, 34.07, 17.84, 51, 30, 0, 76)
      , (120.19, 46, 136, 182, 200.29, 59.65, 44.71, 75, 25, 0, 29)
      , (47.55, 34, 48, 83, 222.86, 41.88, 22.94, 59, 42, 0, 67)
      , (121.63, 104, 124, 150, 213.91, 18.11, 49.8, 31, 17, 0, 41)
      , (103.02, 11, 123, 176, 199.27, 88.24, 36.67, 94, 30, 0, 31)
      , (74.48, 0, 90, 140, 201.43, 100, 27.45, 100, 36, 0, 45)
      , (115.26, 27, 139, 140, 180.53, 67.66, 32.75, 81, 1, 0, 45)
      , (79.23, 15, 93, 132, 200, 79.59, 28.82, 89, 30, 0, 48)
      , (51.9, 0, 65, 75, 188, 100, 14.71, 100, 13, 0, 71)
      , (92.27, 0, 117, 119, 181.01, 100, 23.33, 100, 2, 0, 53)
      , (47.11, 43, 44, 90, 238.72, 35.34, 26.08, 52, 51, 0, 65)
      , (100.29, 74, 104, 141, 213.13, 31.16, 42.16, 48, 26, 0, 45)
      , (138.74, 103, 146, 172, 202.61, 29.36, 53.92, 40, 15, 0, 33)
      , (93.4, 44, 105, 124, 194.25, 47.62, 32.94, 65, 15, 0, 51)
      , (45.28, 27, 47, 82, 218.18, 50.46, 21.37, 67, 43, 0, 68)
      , (102.44, 59, 116, 96, 158.95, 32.57, 34.31, 49, 0, 17, 55)
      , (88.55, 49, 104, 52, 123.27, 35.95, 30, 53, 0, 50, 59)
      , (76.75, 45, 90, 39, 112.94, 39.53, 25.29, 50, 0, 57, 65)
      , (80.2, 78, 83, 59, 72.50, 16.9, 27.84, 6, 0, 29, 67)
      , (55.1, 8, 68, 66, 178, 78.95, 14.9, 88, 0, 3, 73)
      , (54.43, 17, 66, 50, 160.41, 59.04, 16.27, 74, 0, 24, 74)
      , (56.63, 59, 57, 46, 50.77, 12.38, 20.59, 0, 3, 22, 77)
      , (47.14, 42, 50, 34, 90, 19.05, 16.47, 16, 0, 32, 80)
      , (51.7, 54, 52, 42, 50, 12.5, 18.82, 0, 4, 22, 79)
      , (49.94, 39, 54, 42, 132, 16.13, 18.24, 28, 0, 22, 79)
      , (98.74, 72, 111, 56, 102.55, 32.93, 32.75, 35, 0, 50, 56)
      , (118.08, 105, 125, 88, 92.43, 17.37, 41.76, 16, 0, 30, 51)
      , (58.02, 48, 61, 58, 166.15, 11.93, 21.37, 21, 0, 5, 76)
      , (116.83, 122, 118, 90, 52.50, 15.09, 41.57, 0, 3, 26, 52)
      , (65.2, 70, 65, 53, 42.35, 13.82, 24.12, 0, 7, 24, 73)
      , (60.28, 60, 61, 54, 68.57, 6.09, 22.55, 2, 0, 11, 76)
      , (81.3, 0, 106, 76, 163.02, 100, 20.78, 100, 0, 28, 58)
      , (113.74, 83, 128, 63, 101.54, 34.03, 37.45, 35, 0, 51, 50)
      , (133.18, 89, 154, 57, 100.21, 45.97, 41.37, 42, 0, 63, 40)
      , (198.66, 183, 206, 172, 100.59, 25.76, 74.12, 11, 0, 17, 19)
      , (62.08, 54, 66, 47, 97.89, 16.81, 22.16, 18, 0, 29, 74)
      , (147.43, 135, 154, 119, 92.57, 14.77, 53.53, 12, 0, 23, 40)
      , (51.41, 57, 51, 39, 40, 18.75, 18.82, 0, 11, 32, 78)
      , (100.18, 0, 132, 80, 156.36, 100, 25.88, 100, 0, 39, 48)
      , (102.07, 90, 110, 59, 83.53, 30.18, 33.14, 18, 0, 46, 57)
      , (73.58, 0, 95, 78, 169.26, 100, 18.63, 100, 0, 18, 63)
      , (173.31, 128, 186, 181, 174.83, 29.59, 61.57, 31, 0, 3, 27)
      , (75.05, 48, 84, 66, 150, 27.27, 25.88, 43, 0, 21, 67)
      , (84.43, 0, 112, 60, 152.14, 100, 21.96, 100, 0, 46, 56)
      , (103.35, 28, 128, 81, 151.80, 64.1, 30.59, 78, 0, 37, 50)
      , (121.03, 72, 135, 127, 172.38, 30.43, 40.59, 47, 0, 6, 47)
      , (162.51, 124, 173, 172, 178.78, 23, 58.24, 28, 0, 1, 32)
      , (61.71, 19, 77, 36, 137.59, 60.42, 18.82, 75, 0, 53, 70)
      , (69.84, 7, 88, 75, 170.37, 85.26, 18.63, 92, 0, 15, 65)
      , (102.94, 0, 140, 39, 136.71, 100, 27.45, 100, 0, 72, 45)
      , (131.47, 0, 182, 18, 125.93, 100, 35.69, 100, 0, 90, 29)
      , (133.67, 123, 136, 142, 198.95, 7.76, 51.96, 13, 4, 0, 44)
      , (148.8, 142, 150, 157, 208, 7.11, 58.63, 10, 4, 0, 38)
      , (119.97, 127, 120, 99, 45, 12.39, 44.31, 0, 6, 22, 50)
      , (118.2, 120, 119, 105, 56, 6.67, 44.12, 0, 1, 13, 53)
      , (155, 155, 155, 155, 0.61, 0, 60.78, 0, 0, 0, 39)
      , (109.15, 107, 110, 107, 120, 1.38, 42.55, 3, 0, 3, 57)
      , (107.47, 117, 106, 94, 31.30, 10.9, 41.37, 0, 9, 20, 54)
      , (96.51, 114, 95, 60, 38.89, 31.03, 34.12, 0, 17, 47, 55)
      , (94.57, 92, 96, 88, 90, 4.35, 36.08, 4, 0, 8, 62)
      , (90.72, 88, 92, 86, 100, 3.37, 34.9, 4, 0, 7, 64)
      , (88.01, 83, 89, 93, 204, 5.68, 34.51, 11, 4, 0, 64)
      , (92.01, 88, 93, 94, 190, 3.3, 35.69, 6, 1, 0, 63)
      , (80.41, 86, 80, 68, 40, 11.69, 30.2, 0, 7, 21, 66)
      , (82.8, 80, 83, 89, 220, 5.33, 33.14, 10, 7, 0, 65)
      , (61.01, 56, 62, 66, 204, 8.2, 23.92, 15, 6, 0, 74)
      , (49.72, 48, 50, 52, 210, 4, 19.61, 8, 4, 0, 80)
      , (73.99, 76, 74, 68, 45, 5.56, 28.24, 0, 3, 11, 70)
      , (127.07, 127, 128, 118, 66, 4.07, 48.24, 1, 0, 8, 50)
      , (72.8, 70, 73, 79, 220, 6.04, 29.22, 11, 8, 0, 69)
      , (64.81, 56, 67, 69, 189.23, 10.4, 24.51, 19, 3, 0, 73)
      , (141.99, 145, 142, 133, 45, 5.17, 54.51, 0, 2, 8, 43)
      , (102.02, 93, 104, 109, 198.75, 7.92, 39.61, 15, 5, 0, 57)
      , (175.77, 180, 176, 161, 47.37, 11.24, 66.86, 0, 2, 11, 29)
      , (128.14, 126, 130, 116, 77.14, 5.69, 48.24, 3, 0, 11, 49)
      , (135.9, 144, 136, 111, 0.13, 12.94, 50, 0, 6, 23, 44)
      , (198.36, 197, 199, 196, 100, 2.61, 77.45, 1, 0, 2, 22)
      , (147.78, 151, 147, 146, 12, 2.35, 58.24, 0, 3, 3, 41)
      , (122.72, 122, 123, 122, 120, 0.41, 48.04, 1, 0, 1, 52)
      , (176, 175, 177, 169, 75, 4.88, 67.84, 1, 0, 5, 31)
      , (102.27, 106, 102, 94, 40, 6, 39.22, 0, 4, 11, 58)
      , (156.94, 152, 158, 161, 200, 4.57, 61.37, 6, 2, 0, 37)
      , (145.08, 142, 146, 145, 165, 1.8, 56.47, 3, 0, 1, 43)
      , (81.22, 79, 82, 80, 140, 1.86, 31.57, 4, 0, 2, 68)
      , (178.84, 182, 179, 168, 47.14, 8.75, 68.63, 0, 2, 8, 29)
      , (145.37, 142, 146, 149, 205.71, 3.2, 57.06, 5, 2, 0, 42)
      , (132.8, 127, 134, 138, 201.82, 4.49, 51.96, 8, 3, 0, 46)
      , (199.93, 200, 200, 199, 0.17, 0.9, 78.24, 0, 0, 0, 22)
      , (123.49, 128, 123, 115, 36.92, 5.35, 47.65, 0, 4, 10, 50)
      , (108.78, 134, 106, 62, 36.67, 36.73, 38.43, 0, 21, 54, 47)
      , (106.44, 153, 99, 43, 30.55, 56.12, 38.43, 0, 35, 72, 40)
      , (84.85, 119, 77, 62, 15.79, 31.49, 35.49, 0, 35, 48, 53)
      , (82.82, 124, 75, 39, 25.41, 52.15, 31.96, 0, 40, 69, 51)
      , (85.09, 138, 73, 49, 16.18, 47.59, 36.67, 0, 47, 64, 46)
      , (76.34, 109, 70, 43, 24.55, 43.42, 29.8, 0, 36, 61, 57)
      , (79.19, 111, 74, 37, 30, 50, 29.02, 0, 33, 67, 56)
      , (61.58, 88, 56, 39, 20.82, 38.58, 24.9, 0, 36, 56, 65)
      , (60.84, 100, 51, 43, 8.42, 39.86, 28.04, 0, 49, 57, 61)
      , (55.96, 72, 53, 38, 26.47, 30.91, 21.57, 0, 26, 47, 72)
      , (56.2, 93, 47, 39, 8.89, 40.91, 25.88, 0, 49, 58, 64)
      , (49.01, 75, 43, 32, 15.35, 40.19, 20.98, 0, 43, 57, 71)
      , (50.82, 67, 47, 41, 13.85, 24.07, 21.18, 0, 30, 39, 74)
      , (55.42, 61, 54, 53, 7.50, 7.02, 22.35, 0, 11, 13, 76)
      , (23.78, 26, 23, 25, 320, 6.12, 9.61, 0, 12, 4, 90)
      , (99.2, 160, 87, 41, 23.19, 59.2, 39.41, 0, 46, 74, 37)
      , (86.35, 118, 80, 56, 23.23, 35.63, 34.12, 0, 32, 53, 54)
      , (92.51, 115, 88, 71, 23.18, 23.66, 36.47, 0, 23, 38, 55)
      , (61.31, 79, 58, 42, 25.95, 30.58, 23.73, 0, 27, 47, 69)
      , (75.89, 125, 64, 49, 11.84, 43.68, 34.12, 0, 49, 61, 51)
      , (225.19, 231, 225, 210, 42.86, 30.43, 86.47, 0, 3, 9, 9)
      , (212.49, 214, 213, 203, 54.55, 11.83, 81.76, 0, 0, 5, 16)
      , (235.64, 236, 236, 231, 0.17, 11.63, 91.57, 0, 0, 2, 7)
      , (43.07, 43, 43, 44, 240, 1.15, 17.06, 2, 2, 0, 83)
      , (14.14, 14, 14, 16, 240, 6.67, 5.88, 12, 12, 0, 94)
      , (160.93, 161, 161, 160, 0.17, 0.53, 62.94, 0, 0, 1, 37)
      , (132.92, 134, 133, 129, 48, 2.02, 51.57, 0, 1, 4, 47)
      , (236.77, 240, 237, 225, 48, 33.33, 91.18, 0, 1, 6, 6)
      , (40.72, 39, 41, 43, 210, 4.88, 16.08, 9, 5, 0, 83)
      , (240.28, 240, 241, 234, 68.57, 20, 93.14, 0, 0, 3, 5)
      , (41.28, 42, 41, 42, 0.83, 1.2, 16.27, 0, 2, 0, 84)
      , (201.64, 199, 203, 196, 94.29, 6.31, 78.24, 2, 0, 3, 20)
      , (132.86, 133, 133, 131, 0.17, 0.81, 51.76, 0, 0, 2, 48)
      , (122.57, 121, 123, 123, 0.50, 0.82, 47.84, 2, 0, 0, 52)
      ]

_hexes :: [Color (SRGB 'NonLinear) Word8]
_hexes =
  [ fromIntegral <$>
  fromComponents (shiftR (x .&. 0xFF0000) 16, shiftR (x .&. 0xFF00) 8, x .&. 0xFF)
  | x <-
      [ 0xCDBA88 :: Word32
      , 0xD0B084
      , 0xD2AA6D
      , 0xF9A800
      , 0xE49E00
      , 0xCB8E00
      , 0xE29000
      , 0xE88C00
      , 0xAF804F
      , 0xDDAF27
      , 0xE3D9C6
      , 0xDDC49A
      , 0xE6D2B5
      , 0xF1DD38
      , 0xF6A950
      , 0xFACA30
      , 0xA48F7A
      , 0xA08F65
      , 0xF6B600
      , 0xF7B500
      , 0xBA8F4C
      , 0xFFFF00
      , 0xA77F0E
      , 0xFF9B00
      , 0xE2A300
      , 0xF99A1C
      , 0xEB9C52
      , 0x908370
      , 0x80643F
      , 0xF09200
      , 0xDD7907
      , 0xBE4E20
      , 0xC63927
      , 0xFA842B
      , 0xE75B12
      , 0xFF2300
      , 0xFFA421
      , 0xF3752C
      , 0xE15501
      , 0xD4652F
      , 0xEC7C25
      , 0xDB6A50
      , 0x954527
      , 0xAB2524
      , 0xA02128
      , 0xA1232B
      , 0x8D1D2C
      , 0x701F29
      , 0x5E2028
      , 0x402225
      , 0x703731
      , 0x7E292C
      , 0xCB8D73
      , 0x9C322E
      , 0xD47479
      , 0xE1A6AD
      , 0xAC4034
      , 0xD3545F
      , 0xD14152
      , 0xC1121C
      , 0xD56D56
      , 0xF70000
      , 0xFF0000
      , 0xB42041
      , 0xE72512
      , 0xAC323B
      , 0x711521
      , 0xB24C43
      , 0x8A5A83
      , 0x933D50
      , 0xD15B8F
      , 0x691639
      , 0x83639D
      , 0x992572
      , 0x4A203B
      , 0x904684
      , 0xA38995
      , 0xC63678
      , 0x8773A1
      , 0x6B6880
      , 0x384C70
      , 0x1F4764
      , 0x2B2C7C
      , 0x2A3756
      , 0x1D1F2A
      , 0x154889
      , 0x41678D
      , 0x313C48
      , 0x2E5978
      , 0x13447C
      , 0x232C3F
      , 0x3481B8
      , 0x232D53
      , 0x6C7C98
      , 0x2874B2
      , 0x0E518D
      , 0x21888F
      , 0x1A5784
      , 0x0B4151
      , 0x07737A
      , 0x2F2A5A
      , 0x4D668E
      , 0x6A93B0
      , 0x296478
      , 0x102C54
      , 0x327662
      , 0x28713E
      , 0x276235
      , 0x4B573E
      , 0x0E4243
      , 0x0F4336
      , 0x40433B
      , 0x283424
      , 0x35382E
      , 0x26392F
      , 0x3E753B
      , 0x68825B
      , 0x31403D
      , 0x797C5A
      , 0x444337
      , 0x3D403A
      , 0x026A52
      , 0x468641
      , 0x48A43F
      , 0xB7D9B1
      , 0x354733
      , 0x86A47C
      , 0x3E3C32
      , 0x008754
      , 0x53753C
      , 0x005D52
      , 0x81C0BB
      , 0x2D5546
      , 0x007243
      , 0x0F8558
      , 0x478A84
      , 0x7FB0B2
      , 0x1B542C
      , 0x005D4C
      , 0x25E712
      , 0x00F700
      , 0x7E8B92
      , 0x8F999F
      , 0x817F68
      , 0x7A7B6D
      , 0x9EA0A1
      , 0x6B716F
      , 0x756F61
      , 0x746643
      , 0x5B6259
      , 0x575D57
      , 0x555D61
      , 0x596163
      , 0x555548
      , 0x51565C
      , 0x373F43
      , 0x2E3234
      , 0x4B4D46
      , 0x818479
      , 0x474A50
      , 0x374447
      , 0x939388
      , 0x5D6970
      , 0xB9B9A8
      , 0x818979
      , 0x939176
      , 0xCBD0CC
      , 0x9A9697
      , 0x7C7F7E
      , 0xB4B8B0
      , 0x6B695F
      , 0x9DA3A6
      , 0x8F9695
      , 0x4E5451
      , 0xBDBDB2
      , 0x91969A
      , 0x82898E
      , 0xCFD0CF
      , 0x888175
      , 0x887142
      , 0x9C6B30
      , 0x7B5141
      , 0x80542F
      , 0x8F4E35
      , 0x6F4A2F
      , 0x6F4F28
      , 0x5A3A29
      , 0x673831
      , 0x49392D
      , 0x633A34
      , 0x4C2F26
      , 0x44322D
      , 0x3F3A3A
      , 0x211F20
      , 0xA65E2F
      , 0x79553C
      , 0x755C49
      , 0x4E3B2B
      , 0x773C27
      , 0xEFEBDC
      , 0xDDDED4
      , 0xF4F8F4
      , 0x2E3032
      , 0x0A0A0D
      , 0xA5A8A6
      , 0x8F8F8C
      , 0xF7F9EF
      , 0x292C2F
      , 0xF7FBF5
      , 0x2A2D2F
      , 0xCFD3CD
      , 0x9C9C9C
      , 0x7E8182
      ]
  ]