packages feed

colour 2.2.1 → 2.3.0

raw patch · 11 files changed

+243/−40 lines, 11 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

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

Files

CHANGELOG view
@@ -1,2 +1,8 @@+New in version 2.3:++- black exported by Data.Colour++- CIELAB conversion functions+ New in version 2.2.1:- - Additional Documenation + - Additional Documenation
Data/Colour.hs view
@@ -108,6 +108,7 @@ -- *Colour type   Colour  ,colourConvert+ ,black   ,AlphaColour  ,opaque, withOpacity
Data/Colour/CIE.hs view
@@ -1,5 +1,5 @@ {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor  Permission is hereby granted, free of charge, to any person obtaining a copy@@ -24,7 +24,8 @@ -- Illumination (CIE). module Data.Colour.CIE  (Colour- ,cieXYZ, toCIEXYZ, luminance+ ,cieXYZ, cieXYZView, luminance+ ,toCIEXYZ -- depricated   ,Chromaticity  ,mkChromaticity, chromaCoords@@ -32,7 +33,7 @@  ,chromaConvert  ,chromaColour - --,lightness, cieLab, cieLuv+ ,lightness, cieLABView, cieLAB --cieLuv  ) where @@ -51,15 +52,18 @@   [r,g,b] = mult matrix [x,y,z]   matrix = map (map fromRational) xyz2rgb709 --- |Return the XYZ colour coordinates for the 2&#176; standard+-- |Returns the XYZ colour coordinates for the 2&#176; standard -- (colourimetric) observer.-toCIEXYZ :: (Fractional a) => Colour a -> (a,a,a)-toCIEXYZ c = (x,y,z)+cieXYZView :: (Fractional a) => Colour a -> (a,a,a)+cieXYZView c = (x,y,z)  where   RGB r g b = toRGB c   [x,y,z] = mult matrix [r,g,b]   matrix = map (map fromRational) rgb7092xyz +{-# DEPRECATED toCIEXYZ "`toCIEXYZ' has been renamed `cieXYZView'" #-}+toCIEXYZ x = cieXYZView x+ {- CIE luminance -} -- |Returns the Y colour coordinate (luminance) for the 2&#176; standard -- (colourimetric) observer.@@ -86,28 +90,56 @@   (ch_x, ch_y, ch_z) = chromaCoords ch   s = y/ch_y --- |Returns the lightness of a colour, which is a perceptually uniform--- measure.-lightness :: (Ord a, Floating a) => Colour a -> a-lightness c | (6/29)^3 < y = 116*y**(1/3) - 16-            | otherwise = (29/3)^3*y+-- |Returns the lightness of a colour with respect to a given white point.+-- Lightness is a perceptually uniform measure.+lightness :: (Ord a, Floating a) => Chromaticity a -- ^White point+                                 -> Colour a -> a+lightness white_ch c | (6/29)^3 < y' = 116*y'**(1/3) - 16+                     | otherwise = (29/3)^3*y'  where-  y = luminance c+  white = chromaColour white_ch 1.0+  y' = (luminance c/luminance white)  -- |Returns the CIELAB coordinates of a colour, which is a -- perceptually uniform colour space.+-- The first coordinate is 'lightness'. -- If you don't know what white point to use, use -- 'Data.Colour.CIE.Illuminant.d65'.-cieLab :: (Ord a, Floating a) => Chromaticity a -- ^White point+cieLABView :: (Ord a, Floating a) => Chromaticity a -- ^White point                               -> Colour a -> (a,a,a)-cieLab white_ch c = (lightness c, a, b)+cieLABView white_ch c = (lightness white_ch c, a, b)  where   white = chromaColour white_ch 1.0   (x,y,z) = toCIEXYZ c   (xn,yn,zn) = toCIEXYZ white-  a = 500*((x/xn)**(1/3) - (y/yn)**(1/3))-  b = 200*((y/yn)**(1/3) - (z/zn)**(1/3))+  (fx, fy, fz) = (f (x/xn), f (y/yn), f (z/zn))+  a = 500*(fx - fy)+  b = 200*(fy - fz)+  f x | (6/29)^3 < x = x**(1/3)+      | otherwise = 841/108*x + 4/29 +-- |Returns the colour for given CIELAB coordinates, which is a+-- perceptually uniform colour space.+-- If you don't know what white point to use, use+-- 'Data.Colour.CIE.Illuminant.d65'.+cieLAB :: (Ord a, Floating a) => Chromaticity a -- ^White point+                              -> a              -- ^L* coordinate (lightness)+                              -> a              -- ^a* coordinate+                              -> a              -- ^b* coordinate+                              -> Colour a+cieLAB white_ch l a b = cieXYZ (xn*transform fx)+                               (yn*transform fy)+                               (zn*transform fz)+ where+  white = chromaColour white_ch 1.0+  (xn,yn,zn) = toCIEXYZ white+  fx = fy + a/500+  fy = (l + 16)/116+  fz = fy - b/200+  delta = 6/29+  transform fa | fa > delta = fa^3+               | otherwise = (fa - 16/116)*3*delta^2+ -- |Returns the CIELUV coordinates of a colour, which is a -- perceptually uniform colour space. -- If you don't know what white point to use, use@@ -119,7 +151,7 @@   white = chromaColour white_ch 1.0   (u', v') = u'v' c   (un', vn') = u'v' white-  l = lightness c+  l = lightness white_ch c -------------------------------------------------------------------------- {- not for export -} u'v' :: (Ord a, Floating a) => Colour a -> (a,a)@@ -130,4 +162,3 @@ rgb7092xyz = (rgb2xyz sRGBGamut)  xyz2rgb709 = inverse rgb7092xyz-
Data/Colour/Internal.hs view
@@ -1,5 +1,5 @@ {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor  Permission is hereby granted, free of charge, to any person obtaining a copy@@ -48,8 +48,13 @@ colourConvert (RGB r g b) =   RGB (Chan.convert r) (Chan.convert g) (Chan.convert b) +-- |'black' is the colourless colour.  It is the identity colour in+-- additive colour spaces.+black :: (Num a) => Colour a+black = RGB Chan.empty Chan.empty Chan.empty+ instance (Num a) => Monoid (Colour a) where-  mempty = RGB Chan.empty Chan.empty Chan.empty+  mempty = black   (RGB r1 g1 b1) `mappend` (RGB r2 g2 b2) =     RGB (r1 `Chan.add` r2) (g1 `Chan.add` g2) (b1 `Chan.add` b2)   mconcat l = RGB (Chan.sum lr) (Chan.sum lg) (Chan.sum lb)
Data/Colour/Names.hs view
@@ -1,5 +1,6 @@+{-# OPTIONS_HADDOCK prune #-} {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor  Permission is hereby granted, free of charge, to any person obtaining a copy@@ -28,10 +29,162 @@ -- 'readColourName' takes a string naming a colour (must be all lowercase) -- and returns the colour. -- Fails if the name is not recognized.-module Data.Colour.Names where+module Data.Colour.Names + (+  readColourName+ ,aliceblue+ ,antiquewhite+ ,aqua+ ,aquamarine+ ,azure+ ,beige+ ,bisque+ ,black+ ,blanchedalmond+ ,blue+ ,blueviolet+ ,brown+ ,burlywood+ ,cadetblue+ ,chartreuse+ ,chocolate+ ,coral+ ,cornflowerblue+ ,cornsilk+ ,crimson+ ,cyan+ ,darkblue+ ,darkcyan+ ,darkgoldenrod+ ,darkgray+ ,darkgreen+ ,darkgrey+ ,darkkhaki+ ,darkmagenta+ ,darkolivegreen+ ,darkorange+ ,darkorchid+ ,darkred+ ,darksalmon+ ,darkseagreen+ ,darkslateblue+ ,darkslategray+ ,darkslategrey+ ,darkturquoise+ ,darkviolet+ ,deeppink+ ,deepskyblue+ ,dimgray+ ,dimgrey+ ,dodgerblue+ ,firebrick+ ,floralwhite+ ,forestgreen+ ,fuchsia+ ,gainsboro+ ,ghostwhite+ ,gold+ ,goldenrod+ ,gray+ ,grey+ ,green+ ,greenyellow+ ,honeydew+ ,hotpink+ ,indianred+ ,indigo+ ,ivory+ ,khaki+ ,lavender+ ,lavenderblush+ ,lawngreen+ ,lemonchiffon+ ,lightblue+ ,lightcoral+ ,lightcyan+ ,lightgoldenrodyellow+ ,lightgray+ ,lightgreen+ ,lightgrey+ ,lightpink+ ,lightsalmon+ ,lightseagreen+ ,lightskyblue+ ,lightslategray+ ,lightslategrey+ ,lightsteelblue+ ,lightyellow+ ,lime+ ,limegreen+ ,linen+ ,magenta+ ,maroon+ ,mediumaquamarine+ ,mediumblue+ ,mediumorchid+ ,mediumpurple+ ,mediumseagreen+ ,mediumslateblue+ ,mediumspringgreen+ ,mediumturquoise+ ,mediumvioletred+ ,midnightblue+ ,mintcream+ ,mistyrose+ ,moccasin+ ,navajowhite+ ,navy+ ,oldlace+ ,olive+ ,olivedrab+ ,orange+ ,orangered+ ,orchid+ ,palegoldenrod+ ,palegreen+ ,paleturquoise+ ,palevioletred+ ,papayawhip+ ,peachpuff+ ,peru+ ,pink+ ,plum+ ,powderblue+ ,purple+ ,red+ ,rosybrown+ ,royalblue+ ,saddlebrown+ ,salmon+ ,sandybrown+ ,seagreen+ ,seashell+ ,sienna+ ,silver+ ,skyblue+ ,slateblue+ ,slategray+ ,slategrey+ ,snow+ ,springgreen+ ,steelblue+ ,tan+ ,teal+ ,thistle+ ,tomato+ ,turquoise+ ,violet+ ,wheat+ ,white+ ,whitesmoke+ ,yellow+ ,yellowgreen+ )+where  import Prelude hiding (tan) import Data.Colour.SRGB+import Data.Colour (black)  readColourName :: (Monad m, Ord a, Floating a) => String -> m (Colour a) readColourName "aliceblue" = return aliceblue@@ -205,8 +358,7 @@ bisque :: (Ord a, Floating a) => Colour a bisque = sRGB24 255 228 196 -black :: (Ord a, Floating a) => Colour a-black = sRGB24 0 0 0+-- black is reexported from Data.Colour  blanchedalmond :: (Ord a, Floating a) => Colour a blanchedalmond = sRGB24 255 235 205
Data/Colour/RGB.hs view
@@ -25,6 +25,7 @@ import Data.List import Data.Colour.Matrix import Data.Colour.CIE.Chromaticity+import Control.Applicative  -- |An RGB triple for an unspecified colour space. data RGB a = RGB {channelRed :: !a@@ -34,6 +35,10 @@  instance Functor RGB where  fmap f (RGB r g b) = RGB (f r) (f g) (f b)++instance Applicative RGB where+ pure c = RGB c c c+ (RGB fr fg fb) <*> (RGB r g b) = RGB (fr r) (fg g) (fb b)  -- |Uncurries a function expecting three r, g, b parameters. uncurryRGB :: (a -> a -> a -> b) -> RGB a -> b
Data/Colour/SRGB.hs view
@@ -1,5 +1,5 @@ {--Copyright (c) 2008,2009+Copyright (c) 2008 Russell O'Connor  Permission is hereby granted, free of charge, to any person obtaining a copy@@ -38,12 +38,6 @@ import Data.Colour.Internal (quantize) import Data.Colour.SRGB.Linear import Data.Colour.RGBSpace hiding (transferFunction)--{- a rewrite rule to think about adding.-   Should I have some instance restrictions (like Word8/Word16 Float/Double)?-# RULES "sRGBBounded" -  forall r g b. toSRGBBounded (sRGBBounded r g b) = RGB r g b #--}  {- Non-linear colour space -} {- the sRGB transfer function approximates a gamma of about 1/2.2 -}
Data/Colour/SRGB/Linear.hs view
@@ -1,5 +1,6 @@+{-# OPTIONS_HADDOCK not-home #-} {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor  Permission is hereby granted, free of charge, to any person obtaining a copy
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor  Permission is hereby granted, free of charge, to any person obtaining a copy
Tests.hs view
@@ -35,6 +35,7 @@ import Data.Colour.SRGB import Data.Colour.SRGB.Linear import Data.Colour.CIE+import Data.Colour.CIE.Illuminant (d65) import Data.Colour.Names --import Data.Colour.HDTV as HDTV --import qualified Data.Colour.SDTV as SDTV@@ -79,8 +80,7 @@   coarbitrary ac = coarbitrary a . coarbitrary c    where     a = alphaChannel ac-    c = ac `over` mempty-    d = opaque c `asTypeOf` ac -- to help the type sytem+    c = ac `over` black  instance (Fractional a, Arbitrary a) =>          Arbitrary (Chromaticity a) where@@ -132,10 +132,10 @@ prop_toFromXYZ :: RColour -> Bool prop_toFromXYZ c = (cieXYZ x y z) == c  where-  (x,y,z) = toCIEXYZ c+  (x,y,z) = cieXYZView c  prop_fromToXYZ :: Rational -> Rational -> Rational -> Bool-prop_fromToXYZ x y z = toCIEXYZ (cieXYZ x y z) == (x,y,z)+prop_fromToXYZ x y z = cieXYZView (cieXYZ x y z) == (x,y,z)  -- Uses the fact that an Arbitrary colour is an sRGB24 colour. prop_toFromSRGB :: DColour -> Bool@@ -144,6 +144,12 @@ prop_fromToSRGB :: Word8 -> Word8 -> Word8 -> Bool prop_fromToSRGB r' g' b' = toSRGB24 (sRGB24 r' g' b') == RGB r' g' b' +prop_toFromLAB :: Chromaticity Double -> DColour -> Bool+prop_toFromLAB wp c = cc (cieLAB wp l a b) == cc c+ where+  (l,a,b) = cieLABView wp c+  cc = toSRGB24+ {- prop_fromToY'CbCr709 :: Word8 -> Word8 -> Word8 -> Bool prop_fromToY'CbCr709 y' cb cr =@@ -277,6 +283,7 @@         ,("XYZ-from-to", test prop_fromToXYZ)         ,("sRGB-to-from", test prop_toFromSRGB)         ,("sRGB-from-to", test prop_fromToSRGB)+        ,("cieLAB-to-from", test (prop_toFromLAB d65)) --        ,("Y'CbCr-709-from-to", test prop_fromToY'CbCr709) --        ,("Y'CbCr-601-from-to", test prop_fromToY'CbCr601)         ,("dissolve-id", test prop_disolveId)
colour.cabal view
@@ -1,10 +1,11 @@ Name:                colour-Version:             2.2.1+Version:             2.3.0 Cabal-Version:       >= 1.2 License:             OtherLicense License-file:        LICENSE Author:              Russell O'Connor Maintainer:          Russell O'Connor <roconnor@theorem.ca>+Homepage:            http://www.haskell.org/haskellwiki/Colour Build-Type:          Simple Category:            data, graphics Synopsis:            A model for human colour/color perception@@ -17,7 +18,7 @@ data-files:          README CHANGELOG  Library-  Build-Depends:     base+  Build-Depends:     base >= 3 && < 5   Exposed-Modules:   Data.Colour                      Data.Colour.SRGB                      Data.Colour.SRGB.Linear