packages feed

nptools-0.4.0: color-list.hs

import Prelude hiding (tan)
import Data.Colour
import Data.Colour.Names
import Data.Colour.SRGB
import Data.Function
import Data.List
import Data.List.NP
import Data.Char
import System.Environment

allNamedColours :: (Floating a, Ord a) => [(String,Colour a)]
allNamedColours = orderByDensity . sortBy (cmpColours `on` snd) $
  [ ("aliceblue", aliceblue)
  , ("antiquewhite", antiquewhite)
  , ("aqua", aqua)
  , ("aquamarine", aquamarine)
  , ("azure", azure)
  , ("beige", beige)
  , ("bisque", bisque)
  , ("black", black)
  , ("blanchedalmond", blanchedalmond)
  , ("blue", blue)
  , ("blueviolet", blueviolet)
  , ("brown", brown)
  , ("burlywood", burlywood)
  , ("cadetblue", cadetblue)
  , ("chartreuse", chartreuse)
  , ("chocolate", chocolate)
  , ("coral", coral)
  , ("cornflowerblue", cornflowerblue)
  , ("cornsilk", cornsilk)
  , ("crimson", crimson)
  , ("cyan", cyan)
  , ("darkblue", darkblue)
  , ("darkcyan", darkcyan)
  , ("darkgoldenrod", darkgoldenrod)
  , ("darkgray", darkgray)
  , ("darkgreen", darkgreen)
  , ("darkgrey", darkgrey)
  , ("darkkhaki", darkkhaki)
  , ("darkmagenta", darkmagenta)
  , ("darkolivegreen", darkolivegreen)
  , ("darkorange", darkorange)
  , ("darkorchid", darkorchid)
  , ("darkred", darkred)
  , ("darksalmon", darksalmon)
  , ("darkseagreen", darkseagreen)
  , ("darkslateblue", darkslateblue)
  , ("darkslategray", darkslategray)
  , ("darkslategrey", darkslategrey)
  , ("darkturquoise", darkturquoise)
  , ("darkviolet", darkviolet)
  , ("deeppink", deeppink)
  , ("deepskyblue", deepskyblue)
  , ("dimgray", dimgray)
  , ("dimgrey", dimgrey)
  , ("dodgerblue", dodgerblue)
  , ("firebrick", firebrick)
  , ("floralwhite", floralwhite)
  , ("forestgreen", forestgreen)
  , ("fuchsia", fuchsia)
  , ("gainsboro", gainsboro)
  , ("ghostwhite", ghostwhite)
  , ("gold", gold)
  , ("goldenrod", goldenrod)
  , ("gray", gray)
  , ("grey", grey)
  , ("green", green)
  , ("greenyellow", greenyellow)
  , ("honeydew", honeydew)
  , ("hotpink", hotpink)
  , ("indianred", indianred)
  , ("indigo", indigo)
  , ("ivory", ivory)
  , ("khaki", khaki)
  , ("lavender", lavender)
  , ("lavenderblush", lavenderblush)
  , ("lawngreen", lawngreen)
  , ("lemonchiffon", lemonchiffon)
  , ("lightblue", lightblue)
  , ("lightcoral", lightcoral)
  , ("lightcyan", lightcyan)
  , ("lightgoldenrodyellow", lightgoldenrodyellow)
  , ("lightgray", lightgray)
  , ("lightgreen", lightgreen)
  , ("lightgrey", lightgrey)
  , ("lightpink", lightpink)
  , ("lightsalmon", lightsalmon)
  , ("lightseagreen", lightseagreen)
  , ("lightskyblue", lightskyblue)
  , ("lightslategray", lightslategray)
  , ("lightslategrey", lightslategrey)
  , ("lightsteelblue", lightsteelblue)
  , ("lightyellow", lightyellow)
  , ("lime", lime)
  , ("limegreen", limegreen)
  , ("linen", linen)
  , ("magenta", magenta)
  , ("maroon", maroon)
  , ("mediumaquamarine", mediumaquamarine)
  , ("mediumblue", mediumblue)
  , ("mediumorchid", mediumorchid)
  , ("mediumpurple", mediumpurple)
  , ("mediumseagreen", mediumseagreen)
  , ("mediumslateblue", mediumslateblue)
  , ("mediumspringgreen", mediumspringgreen)
  , ("mediumturquoise", mediumturquoise)
  , ("mediumvioletred", mediumvioletred)
  , ("midnightblue", midnightblue)
  , ("mintcream", mintcream)
  , ("mistyrose", mistyrose)
  , ("moccasin", moccasin)
  , ("navajowhite", navajowhite)
  , ("navy", navy)
  , ("oldlace", oldlace)
  , ("olive", olive)
  , ("olivedrab", olivedrab)
  , ("orange", orange)
  , ("orangered", orangered)
  , ("orchid", orchid)
  , ("palegoldenrod", palegoldenrod)
  , ("palegreen", palegreen)
  , ("paleturquoise", paleturquoise)
  , ("palevioletred", palevioletred)
  , ("papayawhip", papayawhip)
  , ("peachpuff", peachpuff)
  , ("peru", peru)
  , ("pink", pink)
  , ("plum", plum)
  , ("powderblue", powderblue)
  , ("purple", purple)
  , ("red", red)
  , ("rosybrown", rosybrown)
  , ("royalblue", royalblue)
  , ("saddlebrown", saddlebrown)
  , ("salmon", salmon)
  , ("sandybrown", sandybrown)
  , ("seagreen", seagreen)
  , ("seashell", seashell)
  , ("sienna", sienna)
  , ("silver", silver)
  , ("skyblue", skyblue)
  , ("slateblue", slateblue)
  , ("slategray", slategray)
  , ("slategrey", slategrey)
  , ("snow", snow)
  , ("springgreen", springgreen)
  , ("steelblue", steelblue)
  , ("tan", tan)
  , ("teal", teal)
  , ("thistle", thistle)
  , ("tomato", tomato)
  , ("turquoise", turquoise)
  , ("violet", violet)
  , ("wheat", wheat)
  , ("white", white)
  , ("whitesmoke", whitesmoke)
  , ("yellow", yellow)
  , ("yellowgreen", yellowgreen)
  ]

cmpColours :: (Ord a, Floating a) => Colour a -> Colour a -> Ordering
cmpColours = compare `on` toTuple . toSRGB
  where toTuple (RGB x y z) = (x, y, z)

main :: IO ()
main = do args <- getArgs
          let count =
               case args of
                 [arg] | all isDigit arg -> Just (read arg)
                 []                      -> Nothing
                 _                       -> error "usage"
          mapM_ putStrLn                       -- print them
            . maybe id take count              -- keep at most `count' colours
            . filter (not.("gray"`isInfixOf`)) -- removing some duplicates
            . map fst $ (allNamedColours :: [(String,Colour Double)])