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)])