packages feed

Color 0.2.0 → 0.3.0

raw patch · 53 files changed

+705/−751 lines, 53 filesdep ~vectorPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: vector

API changes (from Hackage documentation)

- Graphics.Color.Adaptation.VonKries: instance forall kt kr (it :: kt) (ir :: kr) e (t :: Graphics.Color.Adaptation.VonKries.VonKries). (Graphics.Color.Space.Internal.Illuminant it, Graphics.Color.Space.Internal.Illuminant ir, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Adaptation.Internal.Adaptation t it ir e)
- Graphics.Color.Adaptation.VonKries: instance forall kt kr (it :: kt) (ir :: kr) e (t :: Graphics.Color.Adaptation.VonKries.VonKries). (Graphics.Color.Space.Internal.Illuminant it, Graphics.Color.Space.Internal.Illuminant ir, Graphics.Color.Algebra.Elevator.Elevator e, GHC.Float.RealFloat e) => Graphics.Color.Adaptation.Internal.ChromaticAdaptation t it ir e
- Graphics.Color.Model: data Y
- Graphics.Color.Model: pattern ColorY :: e -> Color Y e
- Graphics.Color.Model: pattern ColorYA :: e -> e -> Color (Alpha Y) e
- Graphics.Color.Space: Gamut :: !Primary i e -> !Primary i e -> !Primary i e -> Gamut cs i e
- Graphics.Color.Space: INPM :: M3x3 e -> INPM cs e
- Graphics.Color.Space: Linear :: Linearity
- Graphics.Color.Space: NPM :: M3x3 e -> NPM cs e
- Graphics.Color.Space: NonLinear :: Linearity
- Graphics.Color.Space: [gamutBluePrimary] :: Gamut cs i e -> !Primary i e
- Graphics.Color.Space: [gamutGreenPrimary] :: Gamut cs i e -> !Primary i e
- Graphics.Color.Space: [gamutRedPrimary] :: Gamut cs i e -> !Primary i e
- Graphics.Color.Space: [unINPM] :: INPM cs e -> M3x3 e
- Graphics.Color.Space: [unNPM] :: NPM cs e -> M3x3 e
- Graphics.Color.Space: alignmentN :: forall cs e. Storable e => Int -> Color cs e -> Int
- Graphics.Color.Space: class Illuminant i => RedGreenBlue (cs :: Linearity -> Type) (i :: k) | cs -> i
- Graphics.Color.Space: data Gamut cs i e
- Graphics.Color.Space: data Linearity
- Graphics.Color.Space: dcctf :: (RedGreenBlue cs i, RealFloat a, Elevator a) => Color (cs 'NonLinear) a -> Color (cs 'Linear) a
- Graphics.Color.Space: ecctf :: (RedGreenBlue cs i, RealFloat a, Elevator a) => Color (cs 'Linear) a -> Color (cs 'NonLinear) a
- Graphics.Color.Space: foldr3 :: (e -> a -> a) -> a -> e -> e -> e -> a
- Graphics.Color.Space: foldr4 :: (e -> a -> a) -> a -> e -> e -> e -> e -> a
- Graphics.Color.Space: gamut :: (RedGreenBlue cs i, RealFloat e) => Gamut cs i e
- Graphics.Color.Space: gamutWhitePoint :: (RedGreenBlue cs i, RealFloat e) => Gamut cs i e -> WhitePoint i e
- Graphics.Color.Space: inpm :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i a, RealFloat a) => INPM cs a
- Graphics.Color.Space: inpmApply :: (RedGreenBlue cs i, Elevator e) => INPM cs e -> Color (XYZ i) e -> Color (cs 'Linear) e
- Graphics.Color.Space: inpmDerive :: forall cs i e. (ColorSpace (cs 'Linear) i e, RealFloat e) => Gamut cs i e -> INPM cs e
- Graphics.Color.Space: mkColorRGB :: (RedGreenBlue cs i, Coercible (Color RGB e) (Color (cs l) e)) => Color RGB e -> Color (cs l) e
- Graphics.Color.Space: newtype INPM cs e
- Graphics.Color.Space: newtype NPM cs e
- Graphics.Color.Space: npm :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i a, RealFloat a) => NPM cs a
- Graphics.Color.Space: npmApply :: (RedGreenBlue cs i, Elevator e) => NPM cs e -> Color (cs 'Linear) e -> Color (XYZ i) e
- Graphics.Color.Space: npmDerive :: forall cs i e. (ColorSpace (cs 'Linear) i e, RealFloat e) => Gamut cs i e -> NPM cs e
- Graphics.Color.Space: peek3 :: Storable e => (e -> e -> e -> Color cs e) -> Ptr (Color cs e) -> IO (Color cs e)
- Graphics.Color.Space: peek4 :: forall cs e. Storable e => (e -> e -> e -> e -> Color cs e) -> Ptr (Color cs e) -> IO (Color cs e)
- Graphics.Color.Space: pixelWhitePoint :: forall e cs a i l. (RedGreenBlue cs i, RealFloat e) => Color (cs l) a -> WhitePoint i e
- Graphics.Color.Space: poke3 :: Storable e => Ptr (Color cs e) -> e -> e -> e -> IO ()
- Graphics.Color.Space: poke4 :: forall cs e. Storable e => Ptr (Color cs e) -> e -> e -> e -> e -> IO ()
- Graphics.Color.Space: rgb2xyz :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'NonLinear) e -> Color (XYZ i) e
- Graphics.Color.Space: rgbColorGamut :: (RedGreenBlue cs i, RealFloat e) => Color (cs l) a -> Gamut cs i e
- Graphics.Color.Space: rgbLinear2xyz :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'Linear) e -> Color (XYZ i) e
- Graphics.Color.Space: rgbLinearLuminance :: forall cs i e. (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'Linear) e -> Color (Y i) e
- Graphics.Color.Space: rgbLuminance :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'NonLinear) e -> Color (Y i) e
- Graphics.Color.Space: showsColorModelOpen :: ColorModel cs e => Color cs e -> ShowS
- Graphics.Color.Space: sizeOfN :: forall cs e. Storable e => Int -> Color cs e -> Int
- Graphics.Color.Space: traverse3 :: Applicative f => (a -> a -> a -> b) -> (t -> f a) -> t -> t -> t -> f b
- Graphics.Color.Space: traverse4 :: Applicative f => (a -> a -> a -> a -> b) -> (t -> f a) -> t -> t -> t -> t -> f b
- Graphics.Color.Space: unColorRGB :: (RedGreenBlue cs i, Coercible (Color (cs l) e) (Color RGB e)) => Color (cs l) e -> Color RGB e
- Graphics.Color.Space: xyz2rgb :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (XYZ i) e -> Color (cs 'NonLinear) e
- Graphics.Color.Space: xyz2rgbLinear :: forall cs i e. (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (XYZ i) e -> Color (cs 'Linear) e
- Graphics.Color.Space.CIE1931.RGB: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB: data D65
- Graphics.Color.Space.RGB: data SRGB (l :: Linearity)
- Graphics.Color.Space.RGB: pattern ColorSRGB :: e -> e -> e -> Color (SRGB l) e
- Graphics.Color.Space.RGB: pattern ColorSRGBA :: e -> e -> e -> e -> Color (Alpha (SRGB l)) e
- Graphics.Color.Space.RGB.AdobeRGB: inpmStandard :: RealFloat e => INPM AdobeRGB e
- Graphics.Color.Space.RGB.AdobeRGB: itransfer :: Floating a => a -> a
- Graphics.Color.Space.RGB.AdobeRGB: npmStandard :: RealFloat e => NPM AdobeRGB e
- Graphics.Color.Space.RGB.AdobeRGB: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.AdobeRGB: transfer :: Floating a => a -> a
- Graphics.Color.Space.RGB.Alternative.YCbCr: data YCbCr cs
- Graphics.Color.Space.RGB.Alternative.YCbCr: fromColorYCbCr :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Color (YCbCr (cs 'NonLinear)) e' -> Color (cs 'NonLinear) e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr (Graphics.Color.Space.RGB.ITU.Rec601.BT601_525 'Graphics.Color.Space.RGB.Internal.NonLinear)) Graphics.Color.Illuminant.ITU.Rec601.D65 e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr (Graphics.Color.Space.RGB.ITU.Rec601.BT601_625 'Graphics.Color.Space.RGB.Internal.NonLinear)) Graphics.Color.Illuminant.ITU.Rec601.D65 e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr (Graphics.Color.Space.RGB.ITU.Rec709.BT709 'Graphics.Color.Space.RGB.Internal.NonLinear)) Graphics.Color.Illuminant.ITU.Rec601.D65 e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr (Graphics.Color.Space.RGB.SRGB.SRGB 'Graphics.Color.Space.RGB.Internal.NonLinear)) Graphics.Color.Illuminant.ITU.Rec601.D65 e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Model.Internal.ColorModel cs e => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs) e)
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Model.Internal.ColorModel cs e => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs) e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k (cs :: k -> Graphics.Color.Space.RGB.Internal.Linearity -> *) (i :: k) e. (Graphics.Color.Space.RGB.Luma.Luma (cs i), Graphics.Color.Space.Internal.ColorSpace (cs i 'Graphics.Color.Space.RGB.Internal.NonLinear) i e, Graphics.Color.Space.RGB.Internal.RedGreenBlue (cs i) i) => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr (cs i 'Graphics.Color.Space.RGB.Internal.NonLinear)) i e
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k (cs :: k). Data.Foldable.Foldable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs))
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k (cs :: k). Data.Traversable.Traversable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs))
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k (cs :: k). GHC.Base.Applicative (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs))
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k (cs :: k). GHC.Base.Functor (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs))
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k e (cs :: k). Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs) e)
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k e (cs :: k). GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs) e)
- Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k e (cs :: k). GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.YCbCr cs) e)
- Graphics.Color.Space.RGB.Alternative.YCbCr: pattern ColorYCbCr :: e -> e -> e -> Color (YCbCr cs) e
- Graphics.Color.Space.RGB.Alternative.YCbCr: pattern ColorYCbCrA :: e -> e -> e -> e -> Color (Alpha (YCbCr cs)) e
- Graphics.Color.Space.RGB.Alternative.YCbCr: toColorYCbCr :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Color (cs 'NonLinear) e' -> Color (YCbCr (cs 'NonLinear)) e
- Graphics.Color.Space.RGB.Derived.AdobeRGB: instance forall k (l :: Graphics.Color.Space.RGB.Internal.Linearity) (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Derived.AdobeRGB.AdobeRGB i l) e)
- Graphics.Color.Space.RGB.Derived.AdobeRGB: instance forall k (l :: Graphics.Color.Space.RGB.Internal.Linearity) (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Derived.AdobeRGB.AdobeRGB i l) e
- Graphics.Color.Space.RGB.Derived.AdobeRGB: itransfer :: Floating a => a -> a
- Graphics.Color.Space.RGB.Derived.AdobeRGB: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.Derived.AdobeRGB: transfer :: Floating a => a -> a
- Graphics.Color.Space.RGB.Derived.CIERGB: instance forall k (l :: Graphics.Color.Space.RGB.Internal.Linearity) (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Derived.CIERGB.CIERGB i l) e)
- Graphics.Color.Space.RGB.Derived.CIERGB: instance forall k (l :: Graphics.Color.Space.RGB.Internal.Linearity) (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Derived.CIERGB.CIERGB i l) e
- Graphics.Color.Space.RGB.Derived.CIERGB: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.Derived.SRGB: instance forall k (l :: Graphics.Color.Space.RGB.Internal.Linearity) (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Derived.SRGB.SRGB i l) e)
- Graphics.Color.Space.RGB.Derived.SRGB: instance forall k (l :: Graphics.Color.Space.RGB.Internal.Linearity) (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Derived.SRGB.SRGB i l) e
- Graphics.Color.Space.RGB.Derived.SRGB: itransfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.Derived.SRGB: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.Derived.SRGB: transfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.ITU.Rec470: primaries525 :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.ITU.Rec470: primaries625 :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.ITU.Rec601: itransfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.ITU.Rec601: primaries525 :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.ITU.Rec601: primaries625 :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.ITU.Rec601: transfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.ITU.Rec709: itransfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.ITU.Rec709: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.ITU.Rec709: transfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.Luma: instance Data.Foldable.Foldable (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y')
- Graphics.Color.Space.RGB.Luma: instance Data.Traversable.Traversable (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y')
- Graphics.Color.Space.RGB.Luma: instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y' e)
- Graphics.Color.Space.RGB.Luma: instance GHC.Base.Applicative (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y')
- Graphics.Color.Space.RGB.Luma: instance GHC.Base.Functor (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y')
- Graphics.Color.Space.RGB.Luma: instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y' e)
- Graphics.Color.Space.RGB.Luma: instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y' e)
- Graphics.Color.Space.RGB.Luma: instance Graphics.Color.Algebra.Elevator.Elevator e => GHC.Show.Show (Graphics.Color.Model.Internal.Color Graphics.Color.Space.RGB.Luma.Y' e)
- Graphics.Color.Space.RGB.Luma: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Model.Internal.ColorModel Graphics.Color.Space.RGB.Luma.Y' e
- Graphics.Color.Space.RGB.SRGB: inpmStandard :: RealFloat a => INPM SRGB a
- Graphics.Color.Space.RGB.SRGB: itransfer :: (Ord a, Floating a) => a -> a
- Graphics.Color.Space.RGB.SRGB: npmStandard :: RealFloat a => NPM SRGB a
- Graphics.Color.Space.RGB.SRGB: primaries :: RealFloat e => Gamut rgb i e
- Graphics.Color.Space.RGB.SRGB: transfer :: (Ord a, Floating a) => a -> a
- Graphics.Pixel: pattern PixelY :: e -> Pixel Y e
- Graphics.Pixel: pattern PixelYA :: e -> e -> Pixel (Alpha Y) e
- Graphics.Pixel.ColorSpace: data AdobeRGB (l :: Linearity)
- Graphics.Pixel.ColorSpace: data D65
- Graphics.Pixel.ColorSpace: data SRGB (l :: Linearity)
- Graphics.Pixel.ColorSpace: pattern PixelYCbCr :: e -> e -> e -> Pixel (YCbCr cs) e
- Graphics.Pixel.ColorSpace: pattern PixelYCbCrA :: e -> e -> e -> e -> Pixel (Alpha (YCbCr cs)) e
+ Graphics.Color.Adaptation.VonKries: instance forall kt (it :: kt) kr (ir :: kr) e (t :: Graphics.Color.Adaptation.VonKries.VonKries). (Graphics.Color.Space.Internal.Illuminant it, Graphics.Color.Space.Internal.Illuminant ir, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Adaptation.Internal.Adaptation t it ir e)
+ Graphics.Color.Adaptation.VonKries: instance forall kt (it :: kt) kr (ir :: kr) e (t :: Graphics.Color.Adaptation.VonKries.VonKries). (Graphics.Color.Space.Internal.Illuminant it, Graphics.Color.Space.Internal.Illuminant ir, Graphics.Color.Algebra.Elevator.Elevator e, GHC.Float.RealFloat e) => Graphics.Color.Adaptation.Internal.ChromaticAdaptation t it ir e
+ Graphics.Color.Model: data X
+ Graphics.Color.Model: modifyAlpha :: (e -> e) -> Color (Alpha cs) e -> Color (Alpha cs) e
+ Graphics.Color.Model: pattern ColorX :: e -> Color X e
+ Graphics.Color.Model: pattern ColorXA :: e -> e -> Color (Alpha X) e
+ Graphics.Color.Space: (//) :: Elevator e => e -> e -> e
+ Graphics.Color.Space: clamp01 :: RealFloat a => a -> a
+ Graphics.Color.Space: class (Show e, Eq e, Num e, Typeable e, Unbox e, Storable e) => Elevator e
+ Graphics.Color.Space: fieldFormat :: Elevator e => e -> FieldFormat
+ Graphics.Color.Space: fromDouble :: Elevator e => Double -> e
+ Graphics.Color.Space: fromRealFloat :: (Elevator e, Elevator a, RealFloat a) => a -> e
+ Graphics.Color.Space: infixl 7 //
+ Graphics.Color.Space: maxValue :: Elevator e => e
+ Graphics.Color.Space: minValue :: Elevator e => e
+ Graphics.Color.Space: toDouble :: Elevator e => e -> Double
+ Graphics.Color.Space: toFloat :: Elevator e => e -> Float
+ Graphics.Color.Space: toRealFloat :: (Elevator e, Elevator a, RealFloat a) => e -> a
+ Graphics.Color.Space: toShowS :: (Elevator e, PrintfArg e) => e -> ShowS
+ Graphics.Color.Space: toWord16 :: Elevator e => e -> Word16
+ Graphics.Color.Space: toWord32 :: Elevator e => e -> Word32
+ Graphics.Color.Space: toWord64 :: Elevator e => e -> Word64
+ Graphics.Color.Space: toWord8 :: Elevator e => e -> Word8
+ Graphics.Color.Space.RGB: (//) :: Elevator e => e -> e -> e
+ Graphics.Color.Space.RGB: CCT :: Double -> CCT (i :: k)
+ Graphics.Color.Space.RGB: Chromaticity :: Color (CIExyY i) e -> Chromaticity i e
+ Graphics.Color.Space.RGB: Gamut :: !Primary i e -> !Primary i e -> !Primary i e -> Gamut (cs :: Linearity -> Type) i e
+ Graphics.Color.Space.RGB: INPM :: M3x3 e -> INPM cs e
+ Graphics.Color.Space.RGB: Linear :: Linearity
+ Graphics.Color.Space.RGB: NPM :: M3x3 e -> NPM cs e
+ Graphics.Color.Space.RGB: NonLinear :: Linearity
+ Graphics.Color.Space.RGB: PrimaryChromaticity :: Chromaticity i e -> Primary (i :: k) e
+ Graphics.Color.Space.RGB: WhitePointChromaticity :: Chromaticity i e -> WhitePoint (i :: k) e
+ Graphics.Color.Space.RGB: [chromaticityCIExyY] :: Chromaticity i e -> Color (CIExyY i) e
+ Graphics.Color.Space.RGB: [gamutBluePrimary] :: Gamut (cs :: Linearity -> Type) i e -> !Primary i e
+ Graphics.Color.Space.RGB: [gamutGreenPrimary] :: Gamut (cs :: Linearity -> Type) i e -> !Primary i e
+ Graphics.Color.Space.RGB: [gamutRedPrimary] :: Gamut (cs :: Linearity -> Type) i e -> !Primary i e
+ Graphics.Color.Space.RGB: [primaryChromaticity] :: Primary (i :: k) e -> Chromaticity i e
+ Graphics.Color.Space.RGB: [unCCT] :: CCT (i :: k) -> Double
+ Graphics.Color.Space.RGB: [unINPM] :: INPM cs e -> M3x3 e
+ Graphics.Color.Space.RGB: [unNPM] :: NPM cs e -> M3x3 e
+ Graphics.Color.Space.RGB: [whitePointChromaticity] :: WhitePoint (i :: k) e -> Chromaticity i e
+ Graphics.Color.Space.RGB: addAlpha :: Color cs e -> e -> Color (Alpha cs) e
+ Graphics.Color.Space.RGB: clamp01 :: RealFloat a => a -> a
+ Graphics.Color.Space.RGB: class (Functor (Color cs), Applicative (Color cs), Foldable (Color cs), Traversable (Color cs), Eq (Color cs e), Show (Color cs e), Unbox (Components cs e), Storable (Color cs e), Typeable cs, Elevator e, Typeable (Opaque cs)) => ColorModel cs e where {
+ Graphics.Color.Space.RGB: class (Illuminant i, ColorModel (BaseModel cs) e, ColorModel cs e) => ColorSpace cs (i :: k) e | cs -> i where {
+ Graphics.Color.Space.RGB: class (Show e, Eq e, Num e, Typeable e, Unbox e, Storable e) => Elevator e
+ Graphics.Color.Space.RGB: class (Typeable i, Typeable k, KnownNat (Temperature i)) => Illuminant (i :: k) where {
+ Graphics.Color.Space.RGB: class Illuminant i => RedGreenBlue (cs :: Linearity -> Type) (i :: k) | cs -> i
+ Graphics.Color.Space.RGB: coerceGamut :: Gamut cs' i' e -> Gamut cs i e
+ Graphics.Color.Space.RGB: colorTemperature :: Illuminant i => CCT i
+ Graphics.Color.Space.RGB: data Alpha cs
+ Graphics.Color.Space.RGB: data CIExyY (i :: k)
+ Graphics.Color.Space.RGB: data Gamut (cs :: Linearity -> Type) i e
+ Graphics.Color.Space.RGB: data Linearity
+ Graphics.Color.Space.RGB: data XYZ i
+ Graphics.Color.Space.RGB: data Y (i :: k)
+ Graphics.Color.Space.RGB: data family Color cs e :: Type
+ Graphics.Color.Space.RGB: dcctf :: forall cs e i. (RedGreenBlue cs i, RealFloat e) => Color (cs 'NonLinear) e -> Color (cs 'Linear) e
+ Graphics.Color.Space.RGB: dropAlpha :: Color (Alpha cs) e -> Color cs e
+ Graphics.Color.Space.RGB: ecctf :: forall cs e i. (RedGreenBlue cs i, RealFloat e) => Color (cs 'Linear) e -> Color (cs 'NonLinear) e
+ Graphics.Color.Space.RGB: fieldFormat :: Elevator e => e -> FieldFormat
+ Graphics.Color.Space.RGB: fromBaseModel :: (ColorSpace cs i e, Coercible (Color (BaseModel cs) e) (Color cs e)) => Color (BaseModel cs) e -> Color cs e
+ Graphics.Color.Space.RGB: fromBaseSpace :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e) => Color (BaseSpace cs) e -> Color cs e
+ Graphics.Color.Space.RGB: fromColorXYZ :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e, Elevator a, RealFloat a) => Color (XYZ i) a -> Color cs e
+ Graphics.Color.Space.RGB: fromComponents :: ColorModel cs e => Components cs e -> Color cs e
+ Graphics.Color.Space.RGB: fromDouble :: Elevator e => Double -> e
+ Graphics.Color.Space.RGB: fromRealFloat :: (Elevator e, Elevator a, RealFloat a) => a -> e
+ Graphics.Color.Space.RGB: gamut :: (RedGreenBlue cs i, RealFloat e) => Gamut cs i e
+ Graphics.Color.Space.RGB: gamutWhitePoint :: forall cs e i. (RedGreenBlue cs i, RealFloat e) => Gamut cs i e -> WhitePoint i e
+ Graphics.Color.Space.RGB: getAlpha :: Color (Alpha cs) e -> e
+ Graphics.Color.Space.RGB: infixl 7 //
+ Graphics.Color.Space.RGB: inpm :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => INPM cs e
+ Graphics.Color.Space.RGB: inpmApply :: (RedGreenBlue cs i, Elevator e) => INPM cs e -> Color (XYZ i) e -> Color (cs 'Linear) e
+ Graphics.Color.Space.RGB: inpmDerive :: forall cs i e. (ColorSpace (cs 'Linear) i e, RealFloat e) => Gamut cs i e -> INPM cs e
+ Graphics.Color.Space.RGB: itransfer :: (RedGreenBlue cs i, RealFloat e) => e -> e
+ Graphics.Color.Space.RGB: luminance :: (ColorSpace cs i e, Elevator a, RealFloat a) => Color cs e -> Color (Y i) a
+ Graphics.Color.Space.RGB: maxValue :: Elevator e => e
+ Graphics.Color.Space.RGB: minValue :: Elevator e => e
+ Graphics.Color.Space.RGB: mkColorRGB :: (RedGreenBlue cs i, Coercible (Color RGB e) (Color (cs l) e)) => Color RGB e -> Color (cs l) e
+ Graphics.Color.Space.RGB: modifyAlpha :: (e -> e) -> Color (Alpha cs) e -> Color (Alpha cs) e
+ Graphics.Color.Space.RGB: modifyOpaque :: (Color cs e -> Color cs' e) -> Color (Alpha cs) e -> Color (Alpha cs') e
+ Graphics.Color.Space.RGB: newtype CCT (i :: k)
+ Graphics.Color.Space.RGB: newtype Chromaticity i e
+ Graphics.Color.Space.RGB: newtype INPM cs e
+ Graphics.Color.Space.RGB: newtype NPM cs e
+ Graphics.Color.Space.RGB: newtype Primary (i :: k) e
+ Graphics.Color.Space.RGB: newtype WhitePoint (i :: k) e
+ Graphics.Color.Space.RGB: npm :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => NPM cs e
+ Graphics.Color.Space.RGB: npmApply :: (RedGreenBlue cs i, Elevator e) => NPM cs e -> Color (cs 'Linear) e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: npmDerive :: forall cs i e. (ColorSpace (cs 'Linear) i e, RealFloat e) => Gamut cs i e -> NPM cs e
+ Graphics.Color.Space.RGB: pattern ColorCIExy :: e -> e -> Color (CIExyY i) e
+ Graphics.Color.Space.RGB: pattern ColorXYZ :: e -> e -> e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: pattern ColorXYZA :: e -> e -> e -> e -> Color (Alpha (XYZ i)) e
+ Graphics.Color.Space.RGB: pattern Primary :: e -> e -> Primary i e
+ Graphics.Color.Space.RGB: pattern WhitePoint :: e -> e -> WhitePoint i e
+ Graphics.Color.Space.RGB: pattern Y :: e -> Color (Y i) e
+ Graphics.Color.Space.RGB: pattern YA :: e -> e -> Color (Alpha (Y i)) e
+ Graphics.Color.Space.RGB: pattern ColorCIExyY :: Num e => e -> e -> e -> Color (CIExyY i) e
+ Graphics.Color.Space.RGB: pixelWhitePoint :: forall e cs a i l. (RedGreenBlue cs i, RealFloat e) => Color (cs l) a -> WhitePoint i e
+ Graphics.Color.Space.RGB: primaryTristimulus :: forall i e. (Illuminant i, RealFloat e, Elevator e) => Primary i e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: primaryXZ :: Fractional e => e -> Primary i e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: rgb2xyz :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'NonLinear) e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: rgbColorGamut :: (RedGreenBlue cs i, RealFloat e) => Color (cs l) a -> Gamut cs i e
+ Graphics.Color.Space.RGB: rgbLinear2xyz :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'Linear) e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: rgbLinearLuminance :: forall cs i e. (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'Linear) e -> Color (Y i) e
+ Graphics.Color.Space.RGB: rgbLuminance :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'NonLinear) e -> Color (Y i) e
+ Graphics.Color.Space.RGB: setAlpha :: Color (Alpha cs) e -> e -> Color (Alpha cs) e
+ Graphics.Color.Space.RGB: showsColorModel :: ColorModel cs e => Color cs e -> ShowS
+ Graphics.Color.Space.RGB: showsColorModelName :: ColorModel cs e => Proxy (Color cs e) -> ShowS
+ Graphics.Color.Space.RGB: toBaseModel :: (ColorSpace cs i e, Coercible (Color cs e) (Color (BaseModel cs) e)) => Color cs e -> Color (BaseModel cs) e
+ Graphics.Color.Space.RGB: toBaseSpace :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e) => Color cs e -> Color (BaseSpace cs) e
+ Graphics.Color.Space.RGB: toColorXYZ :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e, Elevator a, RealFloat a) => Color cs e -> Color (XYZ i) a
+ Graphics.Color.Space.RGB: toComponents :: ColorModel cs e => Color cs e -> Components cs e
+ Graphics.Color.Space.RGB: toDouble :: Elevator e => e -> Double
+ Graphics.Color.Space.RGB: toFloat :: Elevator e => e -> Float
+ Graphics.Color.Space.RGB: toRealFloat :: (Elevator e, Elevator a, RealFloat a) => e -> a
+ Graphics.Color.Space.RGB: toShowS :: (Elevator e, PrintfArg e) => e -> ShowS
+ Graphics.Color.Space.RGB: toWord16 :: Elevator e => e -> Word16
+ Graphics.Color.Space.RGB: toWord32 :: Elevator e => e -> Word32
+ Graphics.Color.Space.RGB: toWord64 :: Elevator e => e -> Word64
+ Graphics.Color.Space.RGB: toWord8 :: Elevator e => e -> Word8
+ Graphics.Color.Space.RGB: transfer :: (RedGreenBlue cs i, RealFloat e) => e -> e
+ Graphics.Color.Space.RGB: type BaseSpace cs = cs;
+ Graphics.Color.Space.RGB: type family Temperature i :: n;
+ Graphics.Color.Space.RGB: unColorRGB :: (RedGreenBlue cs i, Coercible (Color (cs l) e) (Color RGB e)) => Color (cs l) e -> Color RGB e
+ Graphics.Color.Space.RGB: whitePoint :: (Illuminant i, RealFloat e) => WhitePoint i e
+ Graphics.Color.Space.RGB: whitePointTristimulus :: forall i e. (Illuminant i, RealFloat e, Elevator e) => Color (XYZ i) e
+ Graphics.Color.Space.RGB: whitePointXZ :: Fractional e => e -> WhitePoint i e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB: xPrimary :: Primary i e -> e
+ Graphics.Color.Space.RGB: xWhitePoint :: WhitePoint i e -> e
+ Graphics.Color.Space.RGB: xyz2rgb :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (XYZ i) e -> Color (cs 'NonLinear) e
+ Graphics.Color.Space.RGB: xyz2rgbLinear :: forall cs i e. (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (XYZ i) e -> Color (cs 'Linear) e
+ Graphics.Color.Space.RGB: yPrimary :: Primary i e -> e
+ Graphics.Color.Space.RGB: yWhitePoint :: WhitePoint i e -> e
+ Graphics.Color.Space.RGB: zPrimary :: Num e => Primary i e -> e
+ Graphics.Color.Space.RGB: zWhitePoint :: Num e => WhitePoint i e -> e
+ Graphics.Color.Space.RGB: }
+ Graphics.Color.Space.RGB.Alternative: (//) :: Elevator e => e -> e -> e
+ Graphics.Color.Space.RGB.Alternative: CCT :: Double -> CCT (i :: k)
+ Graphics.Color.Space.RGB.Alternative: Chromaticity :: Color (CIExyY i) e -> Chromaticity i e
+ Graphics.Color.Space.RGB.Alternative: Gamut :: !Primary i e -> !Primary i e -> !Primary i e -> Gamut (cs :: Linearity -> Type) i e
+ Graphics.Color.Space.RGB.Alternative: INPM :: M3x3 e -> INPM cs e
+ Graphics.Color.Space.RGB.Alternative: Linear :: Linearity
+ Graphics.Color.Space.RGB.Alternative: NPM :: M3x3 e -> NPM cs e
+ Graphics.Color.Space.RGB.Alternative: NonLinear :: Linearity
+ Graphics.Color.Space.RGB.Alternative: PrimaryChromaticity :: Chromaticity i e -> Primary (i :: k) e
+ Graphics.Color.Space.RGB.Alternative: WhitePointChromaticity :: Chromaticity i e -> WhitePoint (i :: k) e
+ Graphics.Color.Space.RGB.Alternative: [chromaticityCIExyY] :: Chromaticity i e -> Color (CIExyY i) e
+ Graphics.Color.Space.RGB.Alternative: [gamutBluePrimary] :: Gamut (cs :: Linearity -> Type) i e -> !Primary i e
+ Graphics.Color.Space.RGB.Alternative: [gamutGreenPrimary] :: Gamut (cs :: Linearity -> Type) i e -> !Primary i e
+ Graphics.Color.Space.RGB.Alternative: [gamutRedPrimary] :: Gamut (cs :: Linearity -> Type) i e -> !Primary i e
+ Graphics.Color.Space.RGB.Alternative: [primaryChromaticity] :: Primary (i :: k) e -> Chromaticity i e
+ Graphics.Color.Space.RGB.Alternative: [unCCT] :: CCT (i :: k) -> Double
+ Graphics.Color.Space.RGB.Alternative: [unINPM] :: INPM cs e -> M3x3 e
+ Graphics.Color.Space.RGB.Alternative: [unNPM] :: NPM cs e -> M3x3 e
+ Graphics.Color.Space.RGB.Alternative: [whitePointChromaticity] :: WhitePoint (i :: k) e -> Chromaticity i e
+ Graphics.Color.Space.RGB.Alternative: addAlpha :: Color cs e -> e -> Color (Alpha cs) e
+ Graphics.Color.Space.RGB.Alternative: clamp01 :: RealFloat a => a -> a
+ Graphics.Color.Space.RGB.Alternative: class (Functor (Color cs), Applicative (Color cs), Foldable (Color cs), Traversable (Color cs), Eq (Color cs e), Show (Color cs e), Unbox (Components cs e), Storable (Color cs e), Typeable cs, Elevator e, Typeable (Opaque cs)) => ColorModel cs e where {
+ Graphics.Color.Space.RGB.Alternative: class (Illuminant i, ColorModel (BaseModel cs) e, ColorModel cs e) => ColorSpace cs (i :: k) e | cs -> i where {
+ Graphics.Color.Space.RGB.Alternative: class (Show e, Eq e, Num e, Typeable e, Unbox e, Storable e) => Elevator e
+ Graphics.Color.Space.RGB.Alternative: class (Typeable i, Typeable k, KnownNat (Temperature i)) => Illuminant (i :: k) where {
+ Graphics.Color.Space.RGB.Alternative: class Illuminant i => RedGreenBlue (cs :: Linearity -> Type) (i :: k) | cs -> i
+ Graphics.Color.Space.RGB.Alternative: coerceGamut :: Gamut cs' i' e -> Gamut cs i e
+ Graphics.Color.Space.RGB.Alternative: colorTemperature :: Illuminant i => CCT i
+ Graphics.Color.Space.RGB.Alternative: data Alpha cs
+ Graphics.Color.Space.RGB.Alternative: data CIExyY (i :: k)
+ Graphics.Color.Space.RGB.Alternative: data Gamut (cs :: Linearity -> Type) i e
+ Graphics.Color.Space.RGB.Alternative: data Linearity
+ Graphics.Color.Space.RGB.Alternative: data XYZ i
+ Graphics.Color.Space.RGB.Alternative: data Y (i :: k)
+ Graphics.Color.Space.RGB.Alternative: data family Color cs e :: Type
+ Graphics.Color.Space.RGB.Alternative: dcctf :: forall cs e i. (RedGreenBlue cs i, RealFloat e) => Color (cs 'NonLinear) e -> Color (cs 'Linear) e
+ Graphics.Color.Space.RGB.Alternative: dropAlpha :: Color (Alpha cs) e -> Color cs e
+ Graphics.Color.Space.RGB.Alternative: ecctf :: forall cs e i. (RedGreenBlue cs i, RealFloat e) => Color (cs 'Linear) e -> Color (cs 'NonLinear) e
+ Graphics.Color.Space.RGB.Alternative: fieldFormat :: Elevator e => e -> FieldFormat
+ Graphics.Color.Space.RGB.Alternative: fromBaseModel :: (ColorSpace cs i e, Coercible (Color (BaseModel cs) e) (Color cs e)) => Color (BaseModel cs) e -> Color cs e
+ Graphics.Color.Space.RGB.Alternative: fromBaseSpace :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e) => Color (BaseSpace cs) e -> Color cs e
+ Graphics.Color.Space.RGB.Alternative: fromColorXYZ :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e, Elevator a, RealFloat a) => Color (XYZ i) a -> Color cs e
+ Graphics.Color.Space.RGB.Alternative: fromComponents :: ColorModel cs e => Components cs e -> Color cs e
+ Graphics.Color.Space.RGB.Alternative: fromDouble :: Elevator e => Double -> e
+ Graphics.Color.Space.RGB.Alternative: fromRealFloat :: (Elevator e, Elevator a, RealFloat a) => a -> e
+ Graphics.Color.Space.RGB.Alternative: gamut :: (RedGreenBlue cs i, RealFloat e) => Gamut cs i e
+ Graphics.Color.Space.RGB.Alternative: gamutWhitePoint :: forall cs e i. (RedGreenBlue cs i, RealFloat e) => Gamut cs i e -> WhitePoint i e
+ Graphics.Color.Space.RGB.Alternative: getAlpha :: Color (Alpha cs) e -> e
+ Graphics.Color.Space.RGB.Alternative: infixl 7 //
+ Graphics.Color.Space.RGB.Alternative: inpm :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => INPM cs e
+ Graphics.Color.Space.RGB.Alternative: inpmApply :: (RedGreenBlue cs i, Elevator e) => INPM cs e -> Color (XYZ i) e -> Color (cs 'Linear) e
+ Graphics.Color.Space.RGB.Alternative: inpmDerive :: forall cs i e. (ColorSpace (cs 'Linear) i e, RealFloat e) => Gamut cs i e -> INPM cs e
+ Graphics.Color.Space.RGB.Alternative: itransfer :: (RedGreenBlue cs i, RealFloat e) => e -> e
+ Graphics.Color.Space.RGB.Alternative: luminance :: (ColorSpace cs i e, Elevator a, RealFloat a) => Color cs e -> Color (Y i) a
+ Graphics.Color.Space.RGB.Alternative: maxValue :: Elevator e => e
+ Graphics.Color.Space.RGB.Alternative: minValue :: Elevator e => e
+ Graphics.Color.Space.RGB.Alternative: mkColorRGB :: (RedGreenBlue cs i, Coercible (Color RGB e) (Color (cs l) e)) => Color RGB e -> Color (cs l) e
+ Graphics.Color.Space.RGB.Alternative: modifyAlpha :: (e -> e) -> Color (Alpha cs) e -> Color (Alpha cs) e
+ Graphics.Color.Space.RGB.Alternative: modifyOpaque :: (Color cs e -> Color cs' e) -> Color (Alpha cs) e -> Color (Alpha cs') e
+ Graphics.Color.Space.RGB.Alternative: newtype CCT (i :: k)
+ Graphics.Color.Space.RGB.Alternative: newtype Chromaticity i e
+ Graphics.Color.Space.RGB.Alternative: newtype INPM cs e
+ Graphics.Color.Space.RGB.Alternative: newtype NPM cs e
+ Graphics.Color.Space.RGB.Alternative: newtype Primary (i :: k) e
+ Graphics.Color.Space.RGB.Alternative: newtype WhitePoint (i :: k) e
+ Graphics.Color.Space.RGB.Alternative: npm :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => NPM cs e
+ Graphics.Color.Space.RGB.Alternative: npmApply :: (RedGreenBlue cs i, Elevator e) => NPM cs e -> Color (cs 'Linear) e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: npmDerive :: forall cs i e. (ColorSpace (cs 'Linear) i e, RealFloat e) => Gamut cs i e -> NPM cs e
+ Graphics.Color.Space.RGB.Alternative: pattern ColorCIExy :: e -> e -> Color (CIExyY i) e
+ Graphics.Color.Space.RGB.Alternative: pattern ColorXYZ :: e -> e -> e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: pattern ColorXYZA :: e -> e -> e -> e -> Color (Alpha (XYZ i)) e
+ Graphics.Color.Space.RGB.Alternative: pattern Primary :: e -> e -> Primary i e
+ Graphics.Color.Space.RGB.Alternative: pattern WhitePoint :: e -> e -> WhitePoint i e
+ Graphics.Color.Space.RGB.Alternative: pattern Y :: e -> Color (Y i) e
+ Graphics.Color.Space.RGB.Alternative: pattern YA :: e -> e -> Color (Alpha (Y i)) e
+ Graphics.Color.Space.RGB.Alternative: pattern ColorCIExyY :: Num e => e -> e -> e -> Color (CIExyY i) e
+ Graphics.Color.Space.RGB.Alternative: pixelWhitePoint :: forall e cs a i l. (RedGreenBlue cs i, RealFloat e) => Color (cs l) a -> WhitePoint i e
+ Graphics.Color.Space.RGB.Alternative: primaryTristimulus :: forall i e. (Illuminant i, RealFloat e, Elevator e) => Primary i e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: primaryXZ :: Fractional e => e -> Primary i e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: rgb2xyz :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'NonLinear) e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: rgbColorGamut :: (RedGreenBlue cs i, RealFloat e) => Color (cs l) a -> Gamut cs i e
+ Graphics.Color.Space.RGB.Alternative: rgbLinear2xyz :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'Linear) e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: rgbLinearLuminance :: forall cs i e. (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'Linear) e -> Color (Y i) e
+ Graphics.Color.Space.RGB.Alternative: rgbLuminance :: (RedGreenBlue cs i, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (cs 'NonLinear) e -> Color (Y i) e
+ Graphics.Color.Space.RGB.Alternative: setAlpha :: Color (Alpha cs) e -> e -> Color (Alpha cs) e
+ Graphics.Color.Space.RGB.Alternative: showsColorModel :: ColorModel cs e => Color cs e -> ShowS
+ Graphics.Color.Space.RGB.Alternative: showsColorModelName :: ColorModel cs e => Proxy (Color cs e) -> ShowS
+ Graphics.Color.Space.RGB.Alternative: toBaseModel :: (ColorSpace cs i e, Coercible (Color cs e) (Color (BaseModel cs) e)) => Color cs e -> Color (BaseModel cs) e
+ Graphics.Color.Space.RGB.Alternative: toBaseSpace :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e) => Color cs e -> Color (BaseSpace cs) e
+ Graphics.Color.Space.RGB.Alternative: toColorXYZ :: (ColorSpace cs i e, ColorSpace (BaseSpace cs) i e, Elevator a, RealFloat a) => Color cs e -> Color (XYZ i) a
+ Graphics.Color.Space.RGB.Alternative: toComponents :: ColorModel cs e => Color cs e -> Components cs e
+ Graphics.Color.Space.RGB.Alternative: toDouble :: Elevator e => e -> Double
+ Graphics.Color.Space.RGB.Alternative: toFloat :: Elevator e => e -> Float
+ Graphics.Color.Space.RGB.Alternative: toRealFloat :: (Elevator e, Elevator a, RealFloat a) => e -> a
+ Graphics.Color.Space.RGB.Alternative: toShowS :: (Elevator e, PrintfArg e) => e -> ShowS
+ Graphics.Color.Space.RGB.Alternative: toWord16 :: Elevator e => e -> Word16
+ Graphics.Color.Space.RGB.Alternative: toWord32 :: Elevator e => e -> Word32
+ Graphics.Color.Space.RGB.Alternative: toWord64 :: Elevator e => e -> Word64
+ Graphics.Color.Space.RGB.Alternative: toWord8 :: Elevator e => e -> Word8
+ Graphics.Color.Space.RGB.Alternative: transfer :: (RedGreenBlue cs i, RealFloat e) => e -> e
+ Graphics.Color.Space.RGB.Alternative: type BaseSpace cs = cs;
+ Graphics.Color.Space.RGB.Alternative: type family Temperature i :: n;
+ Graphics.Color.Space.RGB.Alternative: unColorRGB :: (RedGreenBlue cs i, Coercible (Color (cs l) e) (Color RGB e)) => Color (cs l) e -> Color RGB e
+ Graphics.Color.Space.RGB.Alternative: whitePoint :: (Illuminant i, RealFloat e) => WhitePoint i e
+ Graphics.Color.Space.RGB.Alternative: whitePointTristimulus :: forall i e. (Illuminant i, RealFloat e, Elevator e) => Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: whitePointXZ :: Fractional e => e -> WhitePoint i e -> Color (XYZ i) e
+ Graphics.Color.Space.RGB.Alternative: xPrimary :: Primary i e -> e
+ Graphics.Color.Space.RGB.Alternative: xWhitePoint :: WhitePoint i e -> e
+ Graphics.Color.Space.RGB.Alternative: xyz2rgb :: (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (XYZ i) e -> Color (cs 'NonLinear) e
+ Graphics.Color.Space.RGB.Alternative: xyz2rgbLinear :: forall cs i e. (RedGreenBlue cs i, ColorSpace (cs 'NonLinear) i e, ColorSpace (cs 'Linear) i e, RealFloat e) => Color (XYZ i) e -> Color (cs 'Linear) e
+ Graphics.Color.Space.RGB.Alternative: yPrimary :: Primary i e -> e
+ Graphics.Color.Space.RGB.Alternative: yWhitePoint :: WhitePoint i e -> e
+ Graphics.Color.Space.RGB.Alternative: zPrimary :: Num e => Primary i e -> e
+ Graphics.Color.Space.RGB.Alternative: zWhitePoint :: Num e => WhitePoint i e -> e
+ Graphics.Color.Space.RGB.Alternative: }
+ Graphics.Color.Space.RGB.Alternative.YCbCr: data Y'CbCr (cs :: Linearity -> Type)
+ Graphics.Color.Space.RGB.Alternative.YCbCr: fromColorY'CbCr :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Color (Y'CbCr cs) e' -> Color (cs 'NonLinear) e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance (Data.Typeable.Internal.Typeable cs, Graphics.Color.Model.Internal.ColorModel (cs 'Graphics.Color.Space.RGB.Internal.NonLinear) e, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs) e)
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance (Data.Typeable.Internal.Typeable cs, Graphics.Color.Model.Internal.ColorModel (cs 'Graphics.Color.Space.RGB.Internal.NonLinear) e, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs) e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Data.Foldable.Foldable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs))
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Data.Traversable.Traversable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs))
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs) e)
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance GHC.Base.Applicative (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs))
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance GHC.Base.Functor (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs))
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs) e)
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr cs) e)
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr Graphics.Color.Space.RGB.ITU.Rec601.BT601_525) Graphics.Color.Illuminant.ITU.Rec601.D65 e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr Graphics.Color.Space.RGB.ITU.Rec601.BT601_625) Graphics.Color.Illuminant.ITU.Rec601.D65 e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr Graphics.Color.Space.RGB.ITU.Rec709.BT709) Graphics.Color.Illuminant.ITU.Rec601.D65 e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance Graphics.Color.Algebra.Elevator.Elevator e => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr Graphics.Color.Space.RGB.SRGB.SRGB) Graphics.Color.Illuminant.ITU.Rec601.D65 e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: instance forall k (cs :: k -> Graphics.Color.Space.RGB.Internal.Linearity -> *) (i :: k) e. (Data.Typeable.Internal.Typeable cs, Graphics.Color.Space.RGB.Luma.Luma (cs i), Graphics.Color.Space.Internal.ColorSpace (cs i 'Graphics.Color.Space.RGB.Internal.NonLinear) i e, Graphics.Color.Space.RGB.Internal.RedGreenBlue (cs i) i) => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Alternative.YCbCr.Y'CbCr (cs i)) i e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: pattern ColorY'CbCr :: e -> e -> e -> Color (Y'CbCr cs) e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: pattern ColorY'CbCrA :: e -> e -> e -> e -> Color (Alpha (Y'CbCr cs)) e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: toColorY'CbCr :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Color (cs 'NonLinear) e' -> Color (Y'CbCr cs) e
+ Graphics.Color.Space.RGB.Derived.AdobeRGB: instance forall (l :: Graphics.Color.Space.RGB.Internal.Linearity) k (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Derived.AdobeRGB.AdobeRGB i l) e)
+ Graphics.Color.Space.RGB.Derived.AdobeRGB: instance forall (l :: Graphics.Color.Space.RGB.Internal.Linearity) k (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Derived.AdobeRGB.AdobeRGB i l) e
+ Graphics.Color.Space.RGB.Derived.CIERGB: instance forall (l :: Graphics.Color.Space.RGB.Internal.Linearity) k (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Derived.CIERGB.CIERGB i l) e)
+ Graphics.Color.Space.RGB.Derived.CIERGB: instance forall (l :: Graphics.Color.Space.RGB.Internal.Linearity) k (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Derived.CIERGB.CIERGB i l) e
+ Graphics.Color.Space.RGB.Derived.SRGB: instance forall (l :: Graphics.Color.Space.RGB.Internal.Linearity) k (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Derived.SRGB.SRGB i l) e)
+ Graphics.Color.Space.RGB.Derived.SRGB: instance forall (l :: Graphics.Color.Space.RGB.Internal.Linearity) k (i :: k) e. (Data.Typeable.Internal.Typeable l, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Derived.SRGB.SRGB i l) e
+ Graphics.Color.Space.RGB.Luma: instance (Data.Typeable.Internal.Typeable cs, Graphics.Color.Algebra.Elevator.Elevator e) => GHC.Show.Show (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs) e)
+ Graphics.Color.Space.RGB.Luma: instance (Data.Typeable.Internal.Typeable cs, Graphics.Color.Algebra.Elevator.Elevator e) => Graphics.Color.Model.Internal.ColorModel (Graphics.Color.Space.RGB.Luma.Y' cs) e
+ Graphics.Color.Space.RGB.Luma: instance Data.Foldable.Foldable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs))
+ Graphics.Color.Space.RGB.Luma: instance Data.Traversable.Traversable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs))
+ Graphics.Color.Space.RGB.Luma: instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs) e)
+ Graphics.Color.Space.RGB.Luma: instance GHC.Base.Applicative (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs))
+ Graphics.Color.Space.RGB.Luma: instance GHC.Base.Functor (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs))
+ Graphics.Color.Space.RGB.Luma: instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs) e)
+ Graphics.Color.Space.RGB.Luma: instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.Color.Model.Internal.Color (Graphics.Color.Space.RGB.Luma.Y' cs) e)
+ Graphics.Color.Space.RGB.Luma: instance forall k (cs :: Graphics.Color.Space.RGB.Internal.Linearity -> *) (i :: k) e. (Data.Typeable.Internal.Typeable cs, Graphics.Color.Space.Internal.Illuminant i, Graphics.Color.Space.Internal.ColorSpace (cs 'Graphics.Color.Space.RGB.Internal.Linear) i e, Graphics.Color.Space.Internal.ColorSpace (cs 'Graphics.Color.Space.RGB.Internal.NonLinear) i e, Graphics.Color.Space.RGB.Luma.Luma cs, Graphics.Color.Space.RGB.Internal.RedGreenBlue cs i, GHC.Float.RealFloat e) => Graphics.Color.Space.Internal.ColorSpace (Graphics.Color.Space.RGB.Luma.Y' cs) i e
+ Graphics.Color.Space.RGB.Luma: toBaseLinearSpace :: forall cs e i. (RedGreenBlue cs i, Applicative (Color (cs 'Linear)), RealFloat e) => Color (Y' cs) e -> Color (cs 'Linear) e
+ Graphics.Pixel: pattern PixelX :: e -> Pixel X e
+ Graphics.Pixel: pattern PixelXA :: e -> e -> Pixel (Alpha X) e
+ Graphics.Pixel.ColorSpace: pattern PixelLAB :: e -> e -> e -> Pixel (LAB i) e
+ Graphics.Pixel.ColorSpace: pattern PixelLABA :: e -> e -> e -> e -> Pixel (Alpha (LAB i)) e
+ Graphics.Pixel.ColorSpace: pattern PixelY'CbCr :: e -> e -> e -> Pixel (Y'CbCr cs) e
+ Graphics.Pixel.ColorSpace: pattern PixelY'CbCrA :: e -> e -> e -> e -> Pixel (Alpha (Y'CbCr cs)) e
- Graphics.Color.Adaptation.VonKries: CAT :: M3x3 e -> CAT e
+ Graphics.Color.Adaptation.VonKries: CAT :: M3x3 e -> CAT (t :: k) e
- Graphics.Color.Adaptation.VonKries: ICAT :: M3x3 e -> ICAT e
+ Graphics.Color.Adaptation.VonKries: ICAT :: M3x3 e -> ICAT (t :: k) e
- Graphics.Color.Adaptation.VonKries: bradfordAdaptation :: ChromaticAdaptation 'Bradford it ir e => Adaptation 'Bradford it ir e
+ Graphics.Color.Adaptation.VonKries: bradfordAdaptation :: ChromaticAdaptation 'Bradford it ir e => Adaptation 'Bradford it ir e
- Graphics.Color.Adaptation.VonKries: ciecat02Adaptation :: ChromaticAdaptation 'CIECAT02 it ir e => Adaptation 'CIECAT02 it ir e
+ Graphics.Color.Adaptation.VonKries: ciecat02Adaptation :: ChromaticAdaptation 'CIECAT02 it ir e => Adaptation 'CIECAT02 it ir e
- Graphics.Color.Adaptation.VonKries: cmccat2000Adaptation :: ChromaticAdaptation 'CMCCAT2000 it ir e => Adaptation 'CIECAT02 it ir e
+ Graphics.Color.Adaptation.VonKries: cmccat2000Adaptation :: ChromaticAdaptation 'CMCCAT2000 it ir e => Adaptation 'CIECAT02 it ir e
- Graphics.Color.Adaptation.VonKries: fairchildAdaptation :: ChromaticAdaptation 'Fairchild it ir e => Adaptation 'Fairchild it ir e
+ Graphics.Color.Adaptation.VonKries: fairchildAdaptation :: ChromaticAdaptation 'Fairchild it ir e => Adaptation 'Fairchild it ir e
- Graphics.Color.Adaptation.VonKries: vonKriesAdaptation :: ChromaticAdaptation 'VonKries it ir e => Adaptation 'VonKries it ir e
+ Graphics.Color.Adaptation.VonKries: vonKriesAdaptation :: ChromaticAdaptation 'VonKries it ir e => Adaptation 'VonKries it ir e
- Graphics.Color.Model: rgb2y :: forall e e'. (Elevator e', Elevator e, RealFloat e) => Color RGB e' -> Weights e -> Color Y e
+ Graphics.Color.Model: rgb2y :: forall e e'. (Elevator e', Elevator e, RealFloat e) => Color RGB e' -> Weights e -> Color X e
- Graphics.Color.Space: CCT :: Double -> CCT
+ Graphics.Color.Space: CCT :: Double -> CCT (i :: k)
- Graphics.Color.Space: PrimaryChromaticity :: Chromaticity i e -> Primary e
+ Graphics.Color.Space: PrimaryChromaticity :: Chromaticity i e -> Primary (i :: k) e
- Graphics.Color.Space: WhitePointChromaticity :: Chromaticity i e -> WhitePoint e
+ Graphics.Color.Space: WhitePointChromaticity :: Chromaticity i e -> WhitePoint (i :: k) e
- Graphics.Color.Space: [primaryChromaticity] :: Primary e -> Chromaticity i e
+ Graphics.Color.Space: [primaryChromaticity] :: Primary (i :: k) e -> Chromaticity i e
- Graphics.Color.Space: [unCCT] :: CCT -> Double
+ Graphics.Color.Space: [unCCT] :: CCT (i :: k) -> Double
- Graphics.Color.Space: [whitePointChromaticity] :: WhitePoint e -> Chromaticity i e
+ Graphics.Color.Space: [whitePointChromaticity] :: WhitePoint (i :: k) e -> Chromaticity i e
- Graphics.Color.Space: data family Vector a :: Type
+ Graphics.Color.Space: data family Color cs e :: Type
- Graphics.Color.Space: type family Opaque cs
+ Graphics.Color.Space: type family Temperature i :: n;
- Graphics.Color.Space.RGB.Alternative.YCbCr: srgb2ycbcr :: (RedGreenBlue cs i, RealFloat e) => Color (cs 'NonLinear) e -> Color (YCbCr (cs 'NonLinear)) e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: srgb2ycbcr :: (RedGreenBlue cs i, RealFloat e) => Color (cs 'NonLinear) e -> Color (Y'CbCr cs) e
- Graphics.Color.Space.RGB.Alternative.YCbCr: ycbcr2srgb :: (RedGreenBlue cs i, RealFloat e) => Color (YCbCr (cs 'NonLinear)) e -> Color (cs 'NonLinear) e
+ Graphics.Color.Space.RGB.Alternative.YCbCr: ycbcr2srgb :: (RedGreenBlue cs i, RealFloat e) => Color (Y'CbCr cs) e -> Color (cs 'NonLinear) e
- Graphics.Color.Space.RGB.Luma: data Y'
+ Graphics.Color.Space.RGB.Luma: data Y' (cs :: Linearity -> Type)
- Graphics.Color.Space.RGB.Luma: pattern Luma :: () => Color Y e -> Color Y' e
+ Graphics.Color.Space.RGB.Luma: pattern Luma :: () => Color X e -> Color (Y' cs) e
- Graphics.Color.Space.RGB.Luma: pattern Y' :: e -> Color Y' e
+ Graphics.Color.Space.RGB.Luma: pattern Y' :: e -> Color (Y' cs) e
- Graphics.Color.Space.RGB.Luma: pattern Y'A :: e -> e -> Color (Alpha Y') e
+ Graphics.Color.Space.RGB.Luma: pattern Y'A :: e -> e -> Color (Alpha (Y' cs)) e
- Graphics.Color.Space.RGB.Luma: rgbLuma :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Color (cs 'NonLinear) e' -> Color Y' e
+ Graphics.Color.Space.RGB.Luma: rgbLuma :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Color (cs 'NonLinear) e' -> Color (Y' cs) e
- Graphics.Color.Space.RGB.Luma: rgbLumaWeights :: forall cs e' e. (Luma cs, RealFloat e) => Color (cs 'NonLinear) e' -> Weights e
+ Graphics.Color.Space.RGB.Luma: rgbLumaWeights :: forall cs e' e. (Luma cs, RealFloat e) => Color (cs 'NonLinear) e' -> Weights e
- Graphics.Color.Standard.RAL: RAL :: RAL
+ Graphics.Color.Standard.RAL: RAL :: RAL (n :: k)
- Graphics.Pixel.ColorSpace: fromPixelLinearRGB :: (RedGreenBlue cs i, Elevator e, RealFloat e) => Pixel (cs 'Linear) e -> Pixel (cs 'NonLinear) e
+ Graphics.Pixel.ColorSpace: fromPixelLinearRGB :: (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'Linear) e -> Pixel (cs 'NonLinear) e
- Graphics.Pixel.ColorSpace: pattern PixelSRGB :: e -> e -> e -> Pixel (SRGB 'NonLinear) e
+ Graphics.Pixel.ColorSpace: pattern PixelSRGB :: e -> e -> e -> Pixel (SRGB 'NonLinear) e
- Graphics.Pixel.ColorSpace: pattern PixelSRGBA :: e -> e -> e -> e -> Pixel (Alpha (SRGB 'NonLinear)) e
+ Graphics.Pixel.ColorSpace: pattern PixelSRGBA :: e -> e -> e -> e -> Pixel (Alpha (SRGB 'NonLinear)) e
- Graphics.Pixel.ColorSpace: pattern PixelY' :: e -> Pixel Y' e
+ Graphics.Pixel.ColorSpace: pattern PixelY' :: e -> Pixel (Y' cs) e
- Graphics.Pixel.ColorSpace: pattern PixelY'A :: e -> e -> Pixel (Alpha Y') e
+ Graphics.Pixel.ColorSpace: pattern PixelY'A :: e -> e -> Pixel (Alpha (Y' cs)) e
- Graphics.Pixel.ColorSpace: rgbPixelLuma :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Pixel (cs 'NonLinear) e' -> Pixel Y' e
+ Graphics.Pixel.ColorSpace: rgbPixelLuma :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Pixel (cs 'NonLinear) e' -> Pixel (Y' cs) e
- Graphics.Pixel.ColorSpace: toPixelLinearRGB :: (RedGreenBlue cs i, Elevator e, RealFloat e) => Pixel (cs 'NonLinear) e -> Pixel (cs 'Linear) e
+ Graphics.Pixel.ColorSpace: toPixelLinearRGB :: (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'NonLinear) e -> Pixel (cs 'Linear) e

Files

CHANGELOG.md view
@@ -1,7 +1,29 @@ # Changelog for Color +## 0.3.0++* Rename `Y` color model into `X` to avoid the annoying name conflict.+* Add `ColorSpace` instance for `Y'` and enrich it with base space info+* Rename `YCbCr` -> `Y'CbCr` and remove explicit linearity from its base space+* Fix BT470 transfer function. `ecctf` and `dcctf` were mixed up.+* Move `transfer` and `itransfer` functions into the `RedGreenBlue` class+* Move out `ecctf` and `dcctf` functions outside of `RedGreenBlue` class+* Remove all customized functions from RGB modules in favor of their respective class+  implementations:++  * `primaries` (standalone) -> `gamut` (in class)+  * `transfer` (standalone) -> `transfer` (in class)+  * `itransfer` (standalone) -> `itransfer` (in class)+  * `npmStandard` (standalone) -> `npm` (in class)+  * `inpmStandard` (standalone) -> `inpm` (in class)++* Addition of `coerceGamut`+* Fix re-export of vector's `MVector`, `Vector` type families.+* Re-arrange how modules are exported a little bit.+ ## 0.2.0 +* Addition of `CIE1931 RGB` color space * Add `Linearity` kind to `RedGreenBlue` color spaces. * Add `Default` instance for `Pixel` * Addition of universal division `(//)` to `Elevator`
Color.cabal view
@@ -1,5 +1,5 @@ name:                Color-version:             0.2.0+version:             0.3.0 synopsis:            Color spaces and conversions between them description:         Please see the README on GitHub at <https://github.com/lehins/Color#readme> homepage:            https://github.com/lehins/Color@@ -12,7 +12,7 @@ extra-source-files:  README.md                    , CHANGELOG.md extra-doc-files:     files/*.svg-cabal-version:       >=1.18+cabal-version:       1.18 build-type:          Simple tested-with:          GHC == 8.4.3                     , GHC == 8.4.4@@ -68,6 +68,7 @@                      -- , Graphics.Color.Space.LMS                      , Graphics.Color.Standard.RAL                      , Graphics.Pixel+                     , Graphics.Pixel.Internal                      , Graphics.Pixel.ColorSpace    other-modules:       Graphics.Color.Adaptation.Internal@@ -78,15 +79,14 @@                      , Graphics.Color.Model.HSI                      , Graphics.Color.Model.HSL                      , Graphics.Color.Model.HSV-                     , Graphics.Color.Model.Y+                     , Graphics.Color.Model.X                      , Graphics.Color.Model.YCbCr                      , Graphics.Color.Space.Internal                      , Graphics.Color.Space.RGB.Internal-                     , Graphics.Pixel.Internal   build-depends:       base            >= 4.11 && < 5                      , deepseq                      , data-default-class-                     , vector          >= 0.10+                     , vector          >= 0.11    default-language:    Haskell2010   ghc-options:         -Wall
README.md view
@@ -7,7 +7,7 @@  | Language | Travis | Azure | Coveralls |Gitter.im | |:--------:|:------:|:--------:|:---------:|:--------:|-| ![GitHub top language](https://img.shields.io/github/languages/top/lehins/Color.svg) | [![Travis](https://img.shields.io/travis/lehins/Color/master.svg?label=Linux%20%26%20OS%20X)](https://travis-ci.org/lehins/Color) | [![Build Status](https://dev.azure.com/kuleshevich/Color/_apis/build/status/lehins.Color?branchName=master)](https://dev.azure.com/kuleshevich/Color/_build/latest?definitionId=1?branchName=master) | [![Coverage Status](https://coveralls.io/repos/github/lehins/Color/badge.svg?branch=master)](https://coveralls.io/github/lehins/Color?branch=master) | [![Join the chat at https://gitter.im/haskell-massiv/Lobby](https://badges.gitter.im/haskell-massiv/Lobby.svg)](https://gitter.im/haskell-massiv/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)+| ![GitHub top language](https://img.shields.io/github/languages/top/lehins/Color.svg) | [![Travis](https://img.shields.io/travis/lehins/Color/master.svg?label=Linux%20%26%20OS%20X)](https://travis-ci.org/lehins/Color) | [![Build Status](https://dev.azure.com/kuleshevich/Color/_apis/build/status/lehins.Color?branchName=master)](https://dev.azure.com/kuleshevich/Color/_build?branchName=master) | [![Coverage Status](https://coveralls.io/repos/github/lehins/Color/badge.svg?branch=master)](https://coveralls.io/github/lehins/Color?branch=master) | [![Join the chat at https://gitter.im/haskell-massiv/Lobby](https://badges.gitter.im/haskell-massiv/Lobby.svg)](https://gitter.im/haskell-massiv/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)  |      Package       | Hackage | Nightly | LTS | |:-------------------|:-------:|:-------:|:---:|
bench/Conversion.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -10,11 +9,10 @@ import Control.DeepSeq import System.Random as R import qualified Graphics.Color.Model as CM+import Graphics.Color.Algebra import Graphics.Color.Model import Graphics.Color.Space-import Graphics.Color.Space.RGB import Graphics.Color.Illuminant.CIE1931-import Graphics.Color.Space.CIE1976.LAB import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived  import qualified Data.Colour as Colour
src/Graphics/Color/Adaptation/Internal.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DataKinds #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -101,7 +100,7 @@ {-# RULES "convertElevatedWith (Float)"[~2] forall (a :: Adaptation t i i Float) . convertElevatedWith a = convertNoAdaptationFloat "convertElevatedWith (Double)"[~2] forall (a :: Adaptation t i i Double) . convertElevatedWith a = convertNoAdaptation-#-}+  #-}   -- toword8 <$> (fromColorXYZ (chromaticAdaptationXYZ (vonKriesAdaptationMatrix :: VonKriesAdaptationMatrix Bradford D50a D65 Double) (toColorXYZ (ColorLAB 76.022 (-0.366) 27.636 :: Color (LAB D50a) Double) :: Color XYZ Double)) :: Color SRGB Double)
src/Graphics/Color/Adaptation/VonKries.hs view
@@ -1,10 +1,7 @@-{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NegativeLiterals #-}-{-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-}
src/Graphics/Color/Algebra/Binary.hs view
@@ -24,7 +24,6 @@   , fromNum   ) where -import Control.Monad import Data.Bits import qualified Data.Vector.Generic as V import qualified Data.Vector.Generic.Mutable as M@@ -194,11 +193,11 @@   {-# INLINE basicUnsafeSlice #-}   basicOverlaps (MV_Bit mvec) (MV_Bit mvec') = M.basicOverlaps mvec mvec'   {-# INLINE basicOverlaps #-}-  basicUnsafeNew len = MV_Bit `liftM` M.basicUnsafeNew len+  basicUnsafeNew len = MV_Bit <$> M.basicUnsafeNew len   {-# INLINE basicUnsafeNew #-}-  basicUnsafeReplicate len (Bit w) = MV_Bit `liftM` M.basicUnsafeReplicate len w+  basicUnsafeReplicate len (Bit w) = MV_Bit <$> M.basicUnsafeReplicate len w   {-# INLINE basicUnsafeReplicate #-}-  basicUnsafeRead (MV_Bit mvec) idx = Bit `liftM` M.basicUnsafeRead mvec idx+  basicUnsafeRead (MV_Bit mvec) idx = Bit <$> M.basicUnsafeRead mvec idx   {-# INLINE basicUnsafeRead #-}   basicUnsafeWrite (MV_Bit mvec) idx (Bit w) = M.basicUnsafeWrite mvec idx w   {-# INLINE basicUnsafeWrite #-}@@ -210,7 +209,7 @@   {-# INLINE basicUnsafeCopy #-}   basicUnsafeMove (MV_Bit mvec) (MV_Bit mvec') = M.basicUnsafeMove mvec mvec'   {-# INLINE basicUnsafeMove #-}-  basicUnsafeGrow (MV_Bit mvec) len = MV_Bit `liftM` M.basicUnsafeGrow mvec len+  basicUnsafeGrow (MV_Bit mvec) len = MV_Bit <$> M.basicUnsafeGrow mvec len   {-# INLINE basicUnsafeGrow #-} #if MIN_VERSION_vector(0,11,0)   basicInitialize (MV_Bit mvec) = M.basicInitialize mvec@@ -221,15 +220,15 @@ newtype instance U.Vector Bit = V_Bit (U.Vector Word8)  instance V.Vector U.Vector Bit where-  basicUnsafeFreeze (MV_Bit mvec) = V_Bit `liftM` V.basicUnsafeFreeze mvec+  basicUnsafeFreeze (MV_Bit mvec) = V_Bit <$> V.basicUnsafeFreeze mvec   {-# INLINE basicUnsafeFreeze #-}-  basicUnsafeThaw (V_Bit vec) = MV_Bit `liftM` V.basicUnsafeThaw vec+  basicUnsafeThaw (V_Bit vec) = MV_Bit <$> V.basicUnsafeThaw vec   {-# INLINE basicUnsafeThaw #-}   basicLength (V_Bit vec) = V.basicLength vec   {-# INLINE basicLength #-}   basicUnsafeSlice idx len (V_Bit vec) = V_Bit (V.basicUnsafeSlice idx len vec)   {-# INLINE basicUnsafeSlice #-}-  basicUnsafeIndexM (V_Bit vec) idx = Bit `liftM` V.basicUnsafeIndexM vec idx+  basicUnsafeIndexM (V_Bit vec) idx = Bit <$> V.basicUnsafeIndexM vec idx   {-# INLINE basicUnsafeIndexM #-}   basicUnsafeCopy (MV_Bit mvec) (V_Bit vec) = V.basicUnsafeCopy mvec vec   {-# INLINE basicUnsafeCopy #-}
src/Graphics/Color/Model.hs view
@@ -15,9 +15,10 @@   , getAlpha   , setAlpha   , dropAlpha+  , modifyAlpha   , modifyOpaque-  -- * Y-  , module Graphics.Color.Model.Y+  -- * X+  , module Graphics.Color.Model.X   -- * RGB   , module Graphics.Color.Model.RGB   -- * HSI@@ -36,13 +37,13 @@   , module Graphics.Color.Algebra.Elevator   ) where +import Graphics.Color.Algebra.Binary+import Graphics.Color.Algebra.Elevator import Graphics.Color.Model.CMYK import Graphics.Color.Model.HSI import Graphics.Color.Model.HSL import Graphics.Color.Model.HSV-import Graphics.Color.Model.Internal hiding (MVector, Vector)+import Graphics.Color.Model.Internal import Graphics.Color.Model.RGB-import Graphics.Color.Model.Y+import Graphics.Color.Model.X import Graphics.Color.Model.YCbCr-import Graphics.Color.Algebra.Binary-import Graphics.Color.Algebra.Elevator
src/Graphics/Color/Model/Internal.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -46,7 +45,6 @@  import Control.Applicative import Control.DeepSeq (NFData(rnf), deepseq)-import Control.Monad (liftM) import Data.Default.Class (Default(..)) import Data.Foldable import Data.Kind@@ -170,11 +168,11 @@   {-# INLINE basicUnsafeSlice #-}   basicOverlaps (MV_Color mvec) (MV_Color mvec') = VM.basicOverlaps mvec mvec'   {-# INLINE basicOverlaps #-}-  basicUnsafeNew len = MV_Color `liftM` VM.basicUnsafeNew len+  basicUnsafeNew len = MV_Color <$> VM.basicUnsafeNew len   {-# INLINE basicUnsafeNew #-}-  basicUnsafeReplicate len val = MV_Color `liftM` VM.basicUnsafeReplicate len (toComponents val)+  basicUnsafeReplicate len val = MV_Color <$> VM.basicUnsafeReplicate len (toComponents val)   {-# INLINE basicUnsafeReplicate #-}-  basicUnsafeRead (MV_Color mvec) idx = fromComponents `liftM` VM.basicUnsafeRead mvec idx+  basicUnsafeRead (MV_Color mvec) idx = fromComponents <$> VM.basicUnsafeRead mvec idx   {-# INLINE basicUnsafeRead #-}   basicUnsafeWrite (MV_Color mvec) idx val = VM.basicUnsafeWrite mvec idx (toComponents val)   {-# INLINE basicUnsafeWrite #-}@@ -186,26 +184,24 @@   {-# INLINE basicUnsafeCopy #-}   basicUnsafeMove (MV_Color mvec) (MV_Color mvec') = VM.basicUnsafeMove mvec mvec'   {-# INLINE basicUnsafeMove #-}-  basicUnsafeGrow (MV_Color mvec) len = MV_Color `liftM` VM.basicUnsafeGrow mvec len+  basicUnsafeGrow (MV_Color mvec) len = MV_Color <$> VM.basicUnsafeGrow mvec len   {-# INLINE basicUnsafeGrow #-}-#if MIN_VERSION_vector(0,11,0)   basicInitialize (MV_Color mvec) = VM.basicInitialize mvec   {-# INLINE basicInitialize #-}-#endif   newtype instance VU.Vector (Color cs e) = V_Color (VU.Vector (Components cs e))  instance (ColorModel cs e) => V.Vector VU.Vector (Color cs e) where-  basicUnsafeFreeze (MV_Color mvec) = V_Color `liftM` V.basicUnsafeFreeze mvec+  basicUnsafeFreeze (MV_Color mvec) = V_Color <$> V.basicUnsafeFreeze mvec   {-# INLINE basicUnsafeFreeze #-}-  basicUnsafeThaw (V_Color vec) = MV_Color `liftM` V.basicUnsafeThaw vec+  basicUnsafeThaw (V_Color vec) = MV_Color <$> V.basicUnsafeThaw vec   {-# INLINE basicUnsafeThaw #-}   basicLength (V_Color vec) = V.basicLength vec   {-# INLINE basicLength #-}   basicUnsafeSlice idx len (V_Color vec) = V_Color (V.basicUnsafeSlice idx len vec)   {-# INLINE basicUnsafeSlice #-}-  basicUnsafeIndexM (V_Color vec) idx = fromComponents `liftM` V.basicUnsafeIndexM vec idx+  basicUnsafeIndexM (V_Color vec) idx = fromComponents <$> V.basicUnsafeIndexM vec idx   {-# INLINE basicUnsafeIndexM #-}   basicUnsafeCopy (MV_Color mvec) (V_Color vec) = V.basicUnsafeCopy mvec vec   {-# INLINE basicUnsafeCopy #-}
src/Graphics/Color/Model/RGB.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE BangPatterns #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}
+ src/Graphics/Color/Model/X.hs view
@@ -0,0 +1,112 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeFamilies #-}+-- |+-- Module      : Graphics.Color.Model.X+-- Copyright   : (c) Alexey Kuleshevich 2018-2020+-- License     : BSD3+-- Maintainer  : Alexey Kuleshevich <lehins@yandex.ru>+-- Stability   : experimental+-- Portability : non-portable+--+module Graphics.Color.Model.X+  ( X+  -- * Constructors for X color model.+  , pattern ColorX+  , pattern ColorXA+  , Color(X)+  , Weights(..)+  , rgb2y+  ) where++import Data.Coerce+import Foreign.Storable+import Graphics.Color.Model.Internal+import Graphics.Color.Model.RGB++-------------+--- X ---+-------------++-- | A color with a single channel, most likely luminance+data X++-- | A single channel color `X`+newtype instance Color X e = X e++-- | Constructor for @X@+pattern ColorX :: e -> Color X e+pattern ColorX y = X y+{-# COMPLETE ColorX #-}++-- | Constructor for @X@ with alpha channel.+pattern ColorXA :: e -> e -> Color (Alpha X) e+pattern ColorXA y a = Alpha (X y) a+{-# COMPLETE ColorXA #-}++-- | `X` color model+deriving instance Eq e => Eq (Color X e)+-- | `X` color model+deriving instance Ord e => Ord (Color X e)+-- | `X` color model+deriving instance Storable e => Storable (Color X e)+++-- | `X` color model+instance Elevator e => Show (Color X e) where+  showsPrec _ = showsColorModel++-- | `X` color model+instance Elevator e => ColorModel X e where+  type Components X e = e+  toComponents (X y) = y+  {-# INLINE toComponents #-}+  fromComponents = X+  {-# INLINE fromComponents #-}++-- | `X` color model+instance Functor (Color X) where+  fmap f (X y) = X (f y)+  {-# INLINE fmap #-}++-- | `X` color model+instance Applicative (Color X) where+  pure = X+  {-# INLINE pure #-}+  (X fy) <*> (X y) = X (fy y)+  {-# INLINE (<*>) #-}++-- | `X` color model+instance Foldable (Color X) where+  foldr f !z (X y) = f y z+  {-# INLINE foldr #-}++-- | `X` color model+instance Traversable (Color X) where+  traverse f (X y) = X <$> f y+  {-# INLINE traverse #-}++-- | Convert an RGB color model to a single channel by using the supplied weights+--+-- @since 0.1.0+rgb2y ::+     forall e e'. (Elevator e', Elevator e, RealFloat e)+  => Color RGB e'+  -> Weights e+  -> Color X e+rgb2y rgb weights =+  X (coerce (fmap toRealFloat rgb :: Color RGB e) `dotProduct` coerce weights)+{-# INLINE rgb2y #-}++-- | Weights imposed on individual channels of a 3-component color+--+-- @since 0.1.0+newtype Weights e = Weights+  { unWeights :: V3 e+  } deriving (Eq, Num, Show, Fractional, Floating, Functor)
− src/Graphics/Color/Model/Y.hs
@@ -1,108 +0,0 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeFamilies #-}--- |--- Module      : Graphics.Color.Model.Y--- Copyright   : (c) Alexey Kuleshevich 2018-2020--- License     : BSD3--- Maintainer  : Alexey Kuleshevich <lehins@yandex.ru>--- Stability   : experimental--- Portability : non-portable----module Graphics.Color.Model.Y-  ( Y-  -- * Constructors for Y color model.-  , pattern ColorY-  , pattern ColorYA-  , Color(Y)-  , Weights(..)-  , rgb2y-  ) where--import Data.Coerce-import Foreign.Storable-import Graphics.Color.Model.Internal-import Graphics.Color.Model.RGB------------------- Y --------------------- | Luminance of a color-data Y---- | Luminance `Y`-newtype instance Color Y e = Y e---- | Constructor for @Y@-pattern ColorY :: e -> Color Y e-pattern ColorY y = Y y-{-# COMPLETE ColorY #-}---- | Constructor for @Y@ with alpha channel.-pattern ColorYA :: e -> e -> Color (Alpha Y) e-pattern ColorYA y a = Alpha (Y y) a-{-# COMPLETE ColorYA #-}---- | `Y` color model-deriving instance Eq e => Eq (Color Y e)--- | `Y` color model-deriving instance Ord e => Ord (Color Y e)--- | `Y` color model-deriving instance Storable e => Storable (Color Y e)----- | `Y` color model-instance Elevator e => Show (Color Y e) where-  showsPrec _ = showsColorModel---- | `Y` color model-instance Elevator e => ColorModel Y e where-  type Components Y e = e-  toComponents (Y y) = y-  {-# INLINE toComponents #-}-  fromComponents = Y-  {-# INLINE fromComponents #-}---- | `Y` color model-instance Functor (Color Y) where-  fmap f (Y y) = Y (f y)-  {-# INLINE fmap #-}---- | `Y` color model-instance Applicative (Color Y) where-  pure = Y-  {-# INLINE pure #-}-  (Y fy) <*> (Y y) = Y (fy y)-  {-# INLINE (<*>) #-}---- | `Y` color model-instance Foldable (Color Y) where-  foldr f !z (Y y) = f y z-  {-# INLINE foldr #-}---- | `Y` color model-instance Traversable (Color Y) where-  traverse f (Y y) = Y <$> f y-  {-# INLINE traverse #-}---rgb2y ::-     forall e e'. (Elevator e', Elevator e, RealFloat e)-  => Color RGB e'-  -> Weights e-  -> Color Y e-rgb2y rgb weights =-  Y (coerce (fmap toRealFloat rgb :: Color RGB e) `dotProduct` coerce weights)-{-# INLINE rgb2y #-}---newtype Weights e = Weights-  { unWeights :: V3 e-  } deriving (Eq, Num, Show, Fractional, Floating, Functor)
src/Graphics/Color/Model/YCbCr.hs view
@@ -31,7 +31,7 @@ import Foreign.Storable import Graphics.Color.Model.Internal import Graphics.Color.Model.RGB-import Graphics.Color.Model.Y+import Graphics.Color.Model.X  -- | `YCbCr` color model data YCbCr@@ -83,7 +83,7 @@ rgb2ycbcr rgb' weights@(Weights (V3 kr _ kb)) = ColorYCbCr y' cb cr   where     rgb@(ColorRGB r' _ b') = toRealFloat <$> rgb'-    ColorY y' = rgb2y rgb weights+    ColorX y' = rgb2y rgb weights     !cb = 0.5 + 0.5 * (b' - y') / (1 - kb)     !cr = 0.5 + 0.5 * (r' - y') / (1 - kr) {-# INLINE rgb2ycbcr #-}
src/Graphics/Color/Space.hs view
@@ -11,17 +11,19 @@ module Graphics.Color.Space   ( convertColor   , convertColorFloat-  , module X+  , module Graphics.Color.Space.RGB+  , module Graphics.Color.Space.Internal+  , module Graphics.Color.Space.CIE1976.LAB   ) where -import Graphics.Color.Model.Internal as X-import Graphics.Color.Space.Internal as X-import Graphics.Color.Space.RGB.Internal as X+import Graphics.Color.Space.CIE1976.LAB+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB   -- | Convert a color space through `XYZ` intermediary with `Double` precision. Illuminant is -- enforced to be the same, but in case that it is a limitation and chromatic adaptation is--- needed `Graphics.Color.Adaptation.convertWith` can be used instead.+-- needed `Graphics.Color.Adaptation.convert` can be used instead. -- -- @since 0.1.1 convertColor ::
src/Graphics/Color/Space/CIE1931/RGB.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}@@ -20,18 +19,17 @@ -- module Graphics.Color.Space.CIE1931.RGB   ( CIERGB-  , primaries   , castLinearity-  , module Graphics.Color.Space   ) where  import Data.Coerce import Data.Typeable import Foreign.Storable+import Graphics.Color.Illuminant.CIE1931 import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space-import Graphics.Color.Illuminant.CIE1931+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal   -- | The original @CIE1931 RGB@ color space with an arbitrary illuminant@@ -78,16 +76,17 @@   {-# INLINE luminance #-}   toColorXYZ = rgbLinear2xyz . fmap toRealFloat . castLinearity   {-# INLINE toColorXYZ #-}-  fromColorXYZ xyz = castLinearity (fromRealFloat <$> (xyz2rgbLinear @CIERGB xyz))+  fromColorXYZ xyz = castLinearity (fromRealFloat <$> xyz2rgbLinear @CIERGB xyz)   {-# INLINE fromColorXYZ #-}  -- | `CIERGB` color space instance RedGreenBlue CIERGB 'E where-  gamut = primaries-  ecctf = coerce-  {-# INLINE ecctf #-}-  dcctf = coerce-  {-# INLINE dcctf #-}+  -- | [Source](https://github.com/colour-science/colour/blob/60679360c3990bc549b5f947bfeb621383e18b5e/colour/models/rgb/datasets/cie_rgb.py#L44-L48)+  gamut = Gamut (Primary 0.734742840005998 0.265257159994002)+                (Primary 0.273779033824958 0.717477700256116)+                (Primary 0.166555629580280 0.008910726182545)+  transfer = id+  itransfer = id  -- | CIE RGB does not utilize any gamma function, therefore it is safe to cast the -- `Linearity` kind.@@ -96,12 +95,3 @@ castLinearity :: Color (CIERGB l') e -> Color (CIERGB l) e castLinearity = coerce ---- | Primaries for CIERGB------ @since 0.2.0-primaries :: RealFloat e => Gamut rgb i e-primaries = Gamut (Primary 0.734742840005998 0.265257159994002)-                  (Primary 0.273779033824958 0.717477700256116)-                  (Primary 0.166555629580280 0.008910726182545)--- Source ^: https://github.com/colour-science/colour/blob/60679360c3990bc549b5f947bfeb621383e18b5e/colour/models/rgb/datasets/cie_rgb.py#L44-L48
src/Graphics/Color/Space/Internal.hs view
@@ -6,7 +6,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -23,7 +22,17 @@ -- Portability : non-portable -- module Graphics.Color.Space.Internal-  ( Color(Luminance, XYZ, CIExyY)+  ( ColorModel(..)+  -- * Alpha+  , Alpha+  , Opaque+  , addAlpha+  , getAlpha+  , setAlpha+  , dropAlpha+  , modifyAlpha+  , modifyOpaque+  , Color(Alpha, Luminance, XYZ, CIExyY)   , ColorSpace(..)   , Chromaticity(..)   , Primary(.., Primary)@@ -49,15 +58,16 @@   , CIExyY   , pattern ColorCIExy   , pattern ColorCIExyY-  , module GHC.TypeNats-  , module Graphics.Color.Algebra-  , module Graphics.Color.Model.Internal+  , showsColorModel+  , module Graphics.Color.Algebra.Binary+  , module Graphics.Color.Algebra.Elevator   ) where  import Foreign.Storable+import Graphics.Color.Algebra.Binary+import Graphics.Color.Algebra.Elevator import Graphics.Color.Model.Internal-import qualified Graphics.Color.Model.Y as CM-import Graphics.Color.Algebra+import qualified Graphics.Color.Model.X as CM import Data.Typeable import Data.Coerce import GHC.TypeNats@@ -422,16 +432,16 @@ data Y (i :: k)  -- | Luminance `Y`-newtype instance Color (Y i) e = Luminance (CM.Color CM.Y e)+newtype instance Color (Y i) e = Luminance (CM.Color CM.X e)  -- | Constructor for @Y@ with alpha channel. pattern Y :: e -> Color (Y i) e-pattern Y y = Luminance (CM.Y y)+pattern Y y = Luminance (CM.X y) {-# COMPLETE Y #-}  -- | Constructor for @Y@ with alpha channel. pattern YA :: e -> e -> Color (Alpha (Y i)) e-pattern YA y a = Alpha (Luminance (CM.Y y)) a+pattern YA y a = Alpha (Luminance (CM.X y)) a {-# COMPLETE YA #-}  -- | `Y` - relative luminance of a color space@@ -465,7 +475,7 @@  -- | CIE1931 `XYZ` color space instance (Illuminant i, Elevator e) => ColorSpace (Y i) i e where-  type BaseModel (Y i) = CM.Y+  type BaseModel (Y i) = CM.X   toBaseSpace = id   fromBaseSpace = id   luminance = fmap toRealFloat@@ -476,5 +486,5 @@   {-# INLINE fromColorXYZ #-}  {-# RULES-"luminance   :: RealFloat a => Color Y a -> Color Y a" luminance = id+"luminance :: RealFloat a => Color Y a -> Color Y a" luminance = id  #-}
src/Graphics/Color/Space/RGB.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE PatternSynonyms #-} -- | -- Module      : Graphics.Color.Space.RGB -- Copyright   : (c) Alexey Kuleshevich 2019-2020@@ -8,18 +7,19 @@ -- Portability : non-portable -- module Graphics.Color.Space.RGB-  ( -- * Default sRGB color space-    pattern ColorSRGB-  , pattern ColorSRGBA-  , SRGB-  , D65-  -- * Re-exports-  , module Graphics.Color.Space+  ( module Graphics.Color.Space.RGB.Luma+  , module Graphics.Color.Space.RGB.SRGB+  , module Graphics.Color.Space.RGB.AdobeRGB+  , module Graphics.Color.Space.RGB.CIERGB   , module Graphics.Color.Space.RGB.Alternative-  , module Graphics.Color.Space.RGB.Luma+  , module Graphics.Color.Space.RGB.Internal+  , module Graphics.Color.Space.Internal   ) where -import Graphics.Color.Space+import Graphics.Color.Space.Internal import Graphics.Color.Space.RGB.Alternative+import Graphics.Color.Space.RGB.Internal import Graphics.Color.Space.RGB.Luma-import Graphics.Color.Space.RGB.SRGB (pattern ColorSRGB, pattern ColorSRGBA, SRGB, D65)+import Graphics.Color.Space.RGB.AdobeRGB+import Graphics.Color.Space.RGB.SRGB+import Graphics.Color.Space.RGB.CIERGB
src/Graphics/Color/Space/RGB/AdobeRGB.hs view
@@ -24,26 +24,52 @@   , pattern ColorAdobeRGBA   , AdobeRGB   , D65-  , primaries-  , npmStandard-  , inpmStandard-  , transfer-  , itransfer-  , module Graphics.Color.Space   ) where  import Data.Typeable-import Data.Coerce import Foreign.Storable import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal import Graphics.Color.Space.RGB.ITU.Rec601 (D65)   -- | A very common [AdobeRGB (1998)](https://en.wikipedia.org/wiki/Adobe_RGB_color_space)--- color space with the default `D65` illuminant+-- color space with: --+-- * `D65` illuminant+--+-- * Transfer function:+--+-- \[+-- \gamma(u) = u^{2.19921875} = u^\frac{563}{256}+-- \]+--+-- * Inverse transfer function:+--+-- \[+-- \gamma^{-1}(u) = u^\frac{1}{2.19921875} = u^\frac{256}{563}+-- \]+--+-- * Normalized primary matrix:+--+-- >>> :set -XDataKinds+-- >>> import Graphics.Color.Space.RGB.AdobeRGB+-- >>> npm :: NPM AdobeRGB Float+-- [ [ 0.57667000, 0.18556000, 0.18823000 ]+-- , [ 0.29734000, 0.62736000, 0.07529000 ]+-- , [ 0.02703000, 0.07069000, 0.99134000 ] ]+--+-- * Inverse normalized primary matrix:+--+-- >>> :set -XDataKinds+-- >>> import Graphics.Color.Space.RGB.AdobeRGB+-- >>> inpm :: INPM AdobeRGB Float+-- [ [ 2.04159000,-0.56501000,-0.34473000 ]+-- , [-0.96924000, 1.87597000, 0.04156000 ]+-- , [ 0.01344000,-0.11836000, 1.01517000 ] ]+-- -- @since 0.1.0 data AdobeRGB (l :: Linearity) @@ -121,74 +147,16 @@  -- | `AdobeRGB` color space instance RedGreenBlue AdobeRGB D65 where-  gamut = primaries-  npm = npmStandard-  inpm = inpmStandard-  ecctf = AdobeRGB . fmap transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = AdobeRGB . fmap itransfer . coerce-  {-# INLINE dcctf #-}---- | AdobeRGB normalized primary matrix. This is a helper definition, use `npm` instead.------ >>> :set -XDataKinds--- >>> import Graphics.Color.Space.RGB.AdobeRGB--- >>> npmStandard :: NPM AdobeRGB Float--- [ [ 0.57667000, 0.18556000, 0.18823000 ]--- , [ 0.29734000, 0.62736000, 0.07529000 ]--- , [ 0.02703000, 0.07069000, 0.99134000 ] ]------ @since 0.1.0-npmStandard :: RealFloat e => NPM AdobeRGB e-npmStandard = NPM $ M3x3 (V3 0.57667 0.18556 0.18823)-                         (V3 0.29734 0.62736 0.07529)-                         (V3 0.02703 0.07069 0.99134)----- | AdobeRGB inverse normalized primary matrix. This is a helper definition, use `inpm` instead.------ >>> :set -XDataKinds--- >>> import Graphics.Color.Space.RGB.AdobeRGB--- >>> inpmStandard :: INPM AdobeRGB Float--- [ [ 2.04159000,-0.56501000,-0.34473000 ]--- , [-0.96924000, 1.87597000, 0.04156000 ]--- , [ 0.01344000,-0.11836000, 1.01517000 ] ]------ @since 0.1.0-inpmStandard :: RealFloat e => INPM AdobeRGB e-inpmStandard = INPM $ M3x3 (V3  2.04159 -0.56501 -0.34473)-                           (V3 -0.96924  1.87597  0.04156)-                           (V3  0.01344 -0.11836  1.01517)------ | AdobeRGB transfer function "gamma":------ \[--- \gamma(u) = u^{2.19921875} = u^\frac{563}{256}--- \]------ @since 0.1.0-transfer :: Floating a => a -> a-transfer u = u ** (256 / 563)-{-# INLINE transfer #-}----- | AdobeRGB inverse transfer function "gamma":------ \[--- \gamma^{-1}(u) = u^\frac{1}{2.19921875} = u^\frac{256}{563}--- \]------ @since 0.1.0-itransfer :: Floating a => a -> a-itransfer u = u ** 2.19921875 -- in rational form 563/256-{-# INLINE itransfer #-}---- | @AdobeRGB@ primaries------ @since 0.1.0-primaries :: RealFloat e => Gamut rgb i e-primaries = Gamut (Primary 0.64 0.33)-                  (Primary 0.21 0.71)-                  (Primary 0.15 0.06)+  gamut = Gamut (Primary 0.64 0.33)+                (Primary 0.21 0.71)+                (Primary 0.15 0.06)+  transfer u = u ** (256 / 563)+  {-# INLINE transfer #-}+  itransfer u = u ** 2.19921875 -- in rational form 563/256+  {-# INLINE itransfer #-}+  npm = NPM $ M3x3 (V3 0.57667 0.18556 0.18823)+                   (V3 0.29734 0.62736 0.07529)+                   (V3 0.02703 0.07069 0.99134)+  inpm = INPM $ M3x3 (V3  2.04159 -0.56501 -0.34473)+                     (V3 -0.96924  1.87597  0.04156)+                     (V3  0.01344 -0.11836  1.01517)
src/Graphics/Color/Space/RGB/Alternative.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE PatternSynonyms #-} -- | -- Module      : Graphics.Color.Space.RGB.Alternative -- Copyright   : (c) Alexey Kuleshevich 2019-2020@@ -12,6 +11,8 @@   ( module X   ) where +import Graphics.Color.Space.Internal as X+import Graphics.Color.Space.RGB.Internal as X import Graphics.Color.Space.RGB.Alternative.HSI as X import Graphics.Color.Space.RGB.Alternative.HSL as X import Graphics.Color.Space.RGB.Alternative.HSV as X
src/Graphics/Color/Space/RGB/Alternative/CMYK.hs view
@@ -23,7 +23,6 @@   , pattern ColorCMYKA   , CMYK   , Color(CMYK)-  , module Graphics.Color.Space   ) where  import Data.Coerce@@ -32,12 +31,13 @@ import Foreign.Storable import qualified Graphics.Color.Model.CMYK as CM import Graphics.Color.Model.Internal-import Graphics.Color.Space-import Graphics.Color.Space.RGB.AdobeRGB as AdobeRGB+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal import qualified Graphics.Color.Space.RGB.ITU.Rec470 as Rec470+import Graphics.Color.Space.RGB.AdobeRGB+import Graphics.Color.Space.RGB.SRGB import Graphics.Color.Space.RGB.ITU.Rec601 import Graphics.Color.Space.RGB.ITU.Rec709-import Graphics.Color.Space.RGB.SRGB   -- | `CMYK` representation for some (@`RedGreenBlue` cs i@) color space
src/Graphics/Color/Space/RGB/Alternative/HSI.hs view
@@ -25,7 +25,6 @@   , pattern ColorH360SI   , HSI   , Color(HSI)-  , module Graphics.Color.Space   ) where  import Data.Coerce@@ -33,7 +32,8 @@ import Foreign.Storable import qualified Graphics.Color.Model.HSI as CM import Graphics.Color.Model.Internal-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal   -- | `HSI` representation for some (@`RedGreenBlue` cs i@) color space
src/Graphics/Color/Space/RGB/Alternative/HSL.hs view
@@ -25,7 +25,6 @@   , pattern ColorH360SL   , HSL   , Color(HSL)-  , module Graphics.Color.Space   ) where  import Data.Coerce@@ -33,7 +32,8 @@ import Foreign.Storable import qualified Graphics.Color.Model.HSL as CM import Graphics.Color.Model.Internal-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal  -- | `HSL` representation for some (@`RedGreenBlue` cs i@) color space data HSL cs
src/Graphics/Color/Space/RGB/Alternative/HSV.hs view
@@ -25,7 +25,6 @@   , pattern ColorH360SV   , HSV   , Color(HSV)-  , module Graphics.Color.Space   ) where  import Data.Coerce@@ -33,7 +32,8 @@ import Foreign.Storable import qualified Graphics.Color.Model.HSV as CM import Graphics.Color.Model.Internal-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal  -- | `HSV` representation for some (@`RedGreenBlue` cs i@) color space data HSV cs
src/Graphics/Color/Space/RGB/Alternative/YCbCr.hs view
@@ -20,77 +20,71 @@ -- Portability : non-portable -- module Graphics.Color.Space.RGB.Alternative.YCbCr-  ( pattern ColorYCbCr-  , pattern ColorYCbCrA-  , YCbCr-  , Color(YCbCr)+  ( pattern ColorY'CbCr+  , pattern ColorY'CbCrA+  , Y'CbCr+  , Color(Y'CbCr)   , ycbcr2srgb   , srgb2ycbcr-  , toColorYCbCr-  , fromColorYCbCr-  , module Graphics.Color.Space+  , toColorY'CbCr+  , fromColorY'CbCr+  , module Graphics.Color.Space.RGB.Luma   ) where  import Data.Coerce+import Data.Kind import Data.Proxy+import Data.Typeable import Foreign.Storable import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.YCbCr as CM-import Graphics.Color.Space-import Graphics.Color.Space.RGB.SRGB+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal import Graphics.Color.Space.RGB.ITU.Rec601 import Graphics.Color.Space.RGB.ITU.Rec709 import Graphics.Color.Space.RGB.Luma+import Graphics.Color.Space.RGB.SRGB --- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-data YCbCr cs+-- | `Y'CbCr` representation for some non-linear (@`RedGreenBlue` cs i@) color space+data Y'CbCr (cs :: Linearity -> Type) --- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-newtype instance Color (YCbCr cs) e = YCbCr (Color CM.YCbCr e)+-- | Constructor  for `Y'CbCr` color space+newtype instance Color (Y'CbCr cs) e = Y'CbCr (Color CM.YCbCr e) --- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Eq e => Eq (Color (YCbCr cs) e)--- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Ord e => Ord (Color (YCbCr cs) e)--- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Functor (Color (YCbCr cs))--- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Applicative (Color (YCbCr cs))--- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Foldable (Color (YCbCr cs))--- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Traversable (Color (YCbCr cs))--- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-deriving instance Storable e => Storable (Color (YCbCr cs) e)+deriving instance Eq e => Eq (Color (Y'CbCr cs) e)+deriving instance Ord e => Ord (Color (Y'CbCr cs) e)+deriving instance Functor (Color (Y'CbCr cs))+deriving instance Applicative (Color (Y'CbCr cs))+deriving instance Foldable (Color (Y'CbCr cs))+deriving instance Traversable (Color (Y'CbCr cs))+deriving instance Storable e => Storable (Color (Y'CbCr cs) e) --- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-instance ColorModel cs e => Show (Color (YCbCr cs) e) where+instance (Typeable cs, ColorModel (cs 'NonLinear) e, Elevator e) => Show (Color (Y'CbCr cs) e) where   showsPrec _ = showsColorModel --- | Constructor for an RGB color space in an alternative YCbCr color model-pattern ColorYCbCr :: e -> e -> e -> Color (YCbCr cs) e-pattern ColorYCbCr y cb cr = YCbCr (CM.ColorYCbCr y cb cr)-{-# COMPLETE ColorYCbCr #-}+-- | Constructor for an RGB color space in an alternative Y'CbCr color model+pattern ColorY'CbCr :: e -> e -> e -> Color (Y'CbCr cs) e+pattern ColorY'CbCr y cb cr = Y'CbCr (CM.ColorYCbCr y cb cr)+{-# COMPLETE ColorY'CbCr #-} --- | Constructor for @YCbCr@ with alpha channel.-pattern ColorYCbCrA :: e -> e -> e -> e -> Color (Alpha (YCbCr cs)) e-pattern ColorYCbCrA y cb cr a = Alpha (YCbCr (CM.ColorYCbCr y cb cr)) a-{-# COMPLETE ColorYCbCrA #-}+-- | Constructor for @Y'CbCr@ with alpha channel.+pattern ColorY'CbCrA :: e -> e -> e -> e -> Color (Alpha (Y'CbCr cs)) e+pattern ColorY'CbCrA y cb cr a = Alpha (Y'CbCr (CM.ColorYCbCr y cb cr)) a+{-# COMPLETE ColorY'CbCrA #-}  --- | `YCbCr` color model-instance ColorModel cs e => ColorModel (YCbCr cs) e where-  type Components (YCbCr cs) e = (e, e, e)-  toComponents (ColorYCbCr y cb cr) = (y, cb, cr)+instance (Typeable cs, ColorModel (cs 'NonLinear) e, Elevator e) => ColorModel (Y'CbCr cs) e where+  type Components (Y'CbCr cs) e = (e, e, e)+  toComponents (ColorY'CbCr y cb cr) = (y, cb, cr)   {-# INLINE toComponents #-}-  fromComponents (y, cb, cr) = ColorYCbCr y cb cr+  fromComponents (y, cb, cr) = ColorY'CbCr y cb cr   {-# INLINE fromComponents #-}-  showsColorModelName _ = ("YCbCr-" ++) . showsColorModelName (Proxy :: Proxy (Color cs e))+  showsColorModelName _ =+    ("Y'CbCr-" ++) . showsColorModelName (Proxy :: Proxy (Color (cs 'NonLinear) e)) --- | `YCbCr` representation for `SRGB` color space-instance Elevator e => ColorSpace (YCbCr (SRGB 'NonLinear)) D65 e where-  type BaseModel (YCbCr (SRGB 'NonLinear)) = CM.YCbCr-  type BaseSpace (YCbCr (SRGB 'NonLinear)) = SRGB 'NonLinear+instance Elevator e => ColorSpace (Y'CbCr SRGB) D65 e where+  type BaseModel (Y'CbCr SRGB) = CM.YCbCr+  type BaseSpace (Y'CbCr SRGB) = SRGB 'NonLinear   toBaseSpace = fmap fromRealFloat . ycbcr2srgb . fmap toFloat   {-# INLINE toBaseSpace #-}   fromBaseSpace = fmap fromRealFloat . srgb2ycbcr . fmap toFloat@@ -98,47 +92,43 @@   luminance = luminance . toBaseSpace   {-# INLINE luminance #-} --- | `YCbCr` representation for `BT601_525` color space-instance Elevator e => ColorSpace (YCbCr (BT601_525 'NonLinear)) D65 e where-  type BaseModel (YCbCr (BT601_525 'NonLinear)) = CM.YCbCr-  type BaseSpace (YCbCr (BT601_525 'NonLinear)) = BT601_525 'NonLinear-  toBaseSpace = fmap fromDouble . fromColorYCbCr+instance Elevator e => ColorSpace (Y'CbCr BT601_525) D65 e where+  type BaseModel (Y'CbCr BT601_525) = CM.YCbCr+  type BaseSpace (Y'CbCr BT601_525) = BT601_525 'NonLinear+  toBaseSpace = fmap fromDouble . fromColorY'CbCr   {-# INLINE toBaseSpace #-}-  fromBaseSpace = fmap fromDouble . toColorYCbCr+  fromBaseSpace = fmap fromDouble . toColorY'CbCr   {-# INLINE fromBaseSpace #-}   luminance = luminance . toBaseSpace   {-# INLINE luminance #-} --- | `YCbCr` representation for `BT601_625` color space-instance Elevator e => ColorSpace (YCbCr (BT601_625 'NonLinear)) D65 e where-  type BaseModel (YCbCr (BT601_625 'NonLinear)) = CM.YCbCr-  type BaseSpace (YCbCr (BT601_625 'NonLinear)) = BT601_625 'NonLinear-  toBaseSpace = fmap fromDouble . fromColorYCbCr+instance Elevator e => ColorSpace (Y'CbCr BT601_625) D65 e where+  type BaseModel (Y'CbCr BT601_625) = CM.YCbCr+  type BaseSpace (Y'CbCr BT601_625) = BT601_625 'NonLinear+  toBaseSpace = fmap fromDouble . fromColorY'CbCr   {-# INLINE toBaseSpace #-}-  fromBaseSpace = fmap fromDouble . toColorYCbCr+  fromBaseSpace = fmap fromDouble . toColorY'CbCr   {-# INLINE fromBaseSpace #-}   luminance = luminance . toBaseSpace   {-# INLINE luminance #-} --- | `YCbCr` representation for `BT709` color space-instance Elevator e => ColorSpace (YCbCr (BT709 'NonLinear)) D65 e where-  type BaseModel (YCbCr (BT709 'NonLinear)) = CM.YCbCr-  type BaseSpace (YCbCr (BT709 'NonLinear)) = BT709 'NonLinear-  toBaseSpace = fmap fromDouble . fromColorYCbCr+instance Elevator e => ColorSpace (Y'CbCr BT709) D65 e where+  type BaseModel (Y'CbCr BT709) = CM.YCbCr+  type BaseSpace (Y'CbCr BT709) = BT709 'NonLinear+  toBaseSpace = fmap fromDouble . fromColorY'CbCr   {-# INLINE toBaseSpace #-}-  fromBaseSpace = fmap fromDouble . toColorYCbCr+  fromBaseSpace = fmap fromDouble . toColorY'CbCr   {-# INLINE fromBaseSpace #-}   luminance = luminance . toBaseSpace   {-# INLINE luminance #-} --- | `YCbCr` representation for some (@`RedGreenBlue` cs i@) color space-instance (Luma (cs i), ColorSpace (cs i 'NonLinear) i e, RedGreenBlue (cs i) i) =>-         ColorSpace (YCbCr (cs i 'NonLinear)) i e where-  type BaseModel (YCbCr (cs i 'NonLinear)) = CM.YCbCr-  type BaseSpace (YCbCr (cs i 'NonLinear)) = cs i 'NonLinear-  toBaseSpace = fmap fromDouble . fromColorYCbCr+instance (Typeable cs, Luma (cs i), ColorSpace (cs i 'NonLinear) i e, RedGreenBlue (cs i) i) =>+         ColorSpace (Y'CbCr (cs i)) i e where+  type BaseModel (Y'CbCr (cs i)) = CM.YCbCr+  type BaseSpace (Y'CbCr (cs i)) = cs i 'NonLinear+  toBaseSpace = fmap fromDouble . fromColorY'CbCr   {-# INLINE toBaseSpace #-}-  fromBaseSpace = fmap fromDouble . toColorYCbCr+  fromBaseSpace = fmap fromDouble . toColorY'CbCr   {-# INLINE fromBaseSpace #-}   luminance = luminance . toBaseSpace   {-# INLINE luminance #-}@@ -148,8 +138,8 @@ -- -- @since 0.1.3 ycbcr2srgb ::-     (RedGreenBlue cs i, RealFloat e) => Color (YCbCr (cs 'NonLinear)) e -> Color (cs 'NonLinear) e-ycbcr2srgb (ColorYCbCr y' cb cr) = ColorRGB r' g' b'+     (RedGreenBlue cs i, RealFloat e) => Color (Y'CbCr cs) e -> Color (cs 'NonLinear) e+ycbcr2srgb (ColorY'CbCr y' cb cr) = ColorRGB r' g' b'   where     !cb05 = cb - 0.5     !cr05 = cr - 0.5@@ -162,35 +152,35 @@ -- -- @since 0.1.3 srgb2ycbcr ::-     (RedGreenBlue cs i, RealFloat e) => Color (cs 'NonLinear) e -> Color (YCbCr (cs 'NonLinear)) e-srgb2ycbcr (ColorRGB r' g' b') = ColorYCbCr y' cb cr+     (RedGreenBlue cs i, RealFloat e) => Color (cs 'NonLinear) e -> Color (Y'CbCr cs) e+srgb2ycbcr (ColorRGB r' g' b') = ColorY'CbCr y' cb cr   where     !y' =          0.299 * r' +    0.587 * g' +    0.114 * b'     !cb = 0.5 - 0.168736 * r' - 0.331264 * g' +      0.5 * b'     !cr = 0.5 +      0.5 * r' - 0.418688 * g' - 0.081312 * b' {-# INLINE srgb2ycbcr #-} --- | Convert any RGB color space that has `Luma` specified to `YCbCr`+-- | Convert any RGB color space that has `Luma` specified to `Y'CbCr` -- -- @since 0.1.3-toColorYCbCr ::+toColorY'CbCr ::      forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e)   => Color (cs 'NonLinear) e'-  -> Color (YCbCr (cs 'NonLinear)) e-toColorYCbCr rgb = YCbCr (CM.rgb2ycbcr (unColorRGB rgb) weights)+  -> Color (Y'CbCr cs) e+toColorY'CbCr rgb = Y'CbCr (CM.rgb2ycbcr (unColorRGB rgb) weights)   where     !weights = rgbLumaWeights rgb-{-# INLINE toColorYCbCr #-}+{-# INLINE toColorY'CbCr #-} --- | Convert `YCbCr` to the base RGB color space, which must have `Luma` implemented.+-- | Convert `Y'CbCr` to the base RGB color space, which must have `Luma` implemented. -- -- @since 0.1.3-fromColorYCbCr ::+fromColorY'CbCr ::      forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e)-  => Color (YCbCr (cs 'NonLinear)) e'+  => Color (Y'CbCr cs) e'   -> Color (cs 'NonLinear) e-fromColorYCbCr ycbcr = rgb+fromColorY'CbCr ycbcr = rgb   where     !rgb = mkColorRGB (CM.ycbcr2rgb (coerce ycbcr :: Color CM.YCbCr e') weights)     !weights = rgbLumaWeights rgb-{-# INLINE fromColorYCbCr #-}+{-# INLINE fromColorY'CbCr #-}
src/Graphics/Color/Space/RGB/Derived/AdobeRGB.hs view
@@ -4,10 +4,10 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module      : Graphics.Color.Space.RGB.Derived.AdobeRGB@@ -19,18 +19,14 @@ -- module Graphics.Color.Space.RGB.Derived.AdobeRGB   ( AdobeRGB-  , AdobeRGB.primaries-  , AdobeRGB.transfer-  , AdobeRGB.itransfer-  , module Graphics.Color.Space   ) where -import Data.Coerce import Data.Typeable import Foreign.Storable import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal import qualified Graphics.Color.Space.RGB.AdobeRGB as AdobeRGB  @@ -97,8 +93,8 @@  -- | `AdobeRGB` color space (derived) instance Illuminant i => RedGreenBlue (AdobeRGB i) i where-  gamut = AdobeRGB.primaries-  ecctf = AdobeRGB . fmap AdobeRGB.transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = AdobeRGB . fmap AdobeRGB.itransfer . coerce-  {-# INLINE dcctf #-}+  gamut = coerceGamut (gamut @_ @AdobeRGB.AdobeRGB)+  transfer = transfer @_ @AdobeRGB.AdobeRGB+  {-# INLINE transfer #-}+  itransfer = itransfer @_ @AdobeRGB.AdobeRGB+  {-# INLINE itransfer #-}
src/Graphics/Color/Space/RGB/Derived/CIERGB.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}@@ -20,9 +19,7 @@ -- module Graphics.Color.Space.RGB.Derived.CIERGB   ( CIERGB-  , CIERGB.primaries   , castLinearity-  , module Graphics.Color.Space   ) where  import Data.Coerce@@ -30,7 +27,8 @@ import Foreign.Storable import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal import qualified Graphics.Color.Space.CIE1931.RGB as CIERGB  @@ -67,7 +65,7 @@   fromComponents = mkColorRGB . fromComponents   {-# INLINE fromComponents #-} --- | `CIERGB` linear color space (derived)+-- | `CIERGB` color space (derived) instance (Illuminant i, Typeable l, Elevator e) => ColorSpace (CIERGB i l) i e where   type BaseModel (CIERGB i l) = CM.RGB   toBaseSpace = id@@ -78,16 +76,16 @@   {-# INLINE luminance #-}   toColorXYZ = rgbLinear2xyz . fmap toRealFloat . castLinearity   {-# INLINE toColorXYZ #-}-  fromColorXYZ xyz = castLinearity (fromRealFloat <$> (xyz2rgbLinear @(CIERGB i) xyz))+  fromColorXYZ xyz = castLinearity (fromRealFloat <$> xyz2rgbLinear @(CIERGB i) xyz)   {-# INLINE fromColorXYZ #-}  -- | `CIERGB` color space (derived) instance Illuminant i => RedGreenBlue (CIERGB i) i where-  gamut = CIERGB.primaries-  ecctf = coerce-  {-# INLINE ecctf #-}-  dcctf = coerce-  {-# INLINE dcctf #-}+  gamut = coerceGamut (gamut @_ @CIERGB.CIERGB)+  transfer = id+  {-# INLINE transfer #-}+  itransfer = id+  {-# INLINE itransfer #-}  -- | CIE RGB does not utilize any gamma function, therefore it is safe to cast the -- `Linearity` kind.
src/Graphics/Color/Space/RGB/Derived/SRGB.hs view
@@ -4,10 +4,10 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module      : Graphics.Color.Space.RGB.Derived.SRGB@@ -19,18 +19,14 @@ -- module Graphics.Color.Space.RGB.Derived.SRGB   ( SRGB-  , SRGB.primaries-  , SRGB.transfer-  , SRGB.itransfer-  , module Graphics.Color.Space   ) where -import Data.Coerce import Data.Typeable import Foreign.Storable import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal import Graphics.Color.Space.RGB.Luma import qualified Graphics.Color.Space.RGB.SRGB as SRGB @@ -99,11 +95,11 @@  -- | `SRGB` color space (derived) instance Illuminant i => RedGreenBlue (SRGB i) i where-  gamut = SRGB.primaries-  ecctf = SRGB . fmap SRGB.transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = SRGB . fmap SRGB.itransfer . coerce-  {-# INLINE dcctf #-}+  gamut = coerceGamut (gamut @_ @SRGB.SRGB)+  transfer = transfer @_ @SRGB.SRGB+  {-# INLINE transfer #-}+  itransfer = itransfer @_ @SRGB.SRGB+  {-# INLINE itransfer #-}   instance Luma (SRGB i) where
src/Graphics/Color/Space/RGB/ITU/Rec470.hs view
@@ -1,13 +1,12 @@-{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NegativeLiterals #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-}+{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module      : Graphics.Color.Space.RGB.ITU.Rec470@@ -24,17 +23,14 @@   , pattern BT470_625   , BT470_625   , D65-  , primaries525-  , primaries625-  , module Graphics.Color.Space   ) where -import Data.Coerce import Data.Typeable import Foreign.Storable-import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space import Graphics.Color.Illuminant.ITU.Rec470+import qualified Graphics.Color.Model.RGB as CM+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal  ------------------------------------ -- ITU-R BT.470 (525) --------------@@ -102,11 +98,13 @@  -- | ITU-R BT.470 (525) color space instance RedGreenBlue BT470_525 C where-  gamut = primaries525-  ecctf c = BT470_525 (fmap (gamma 2.2) (coerce c))-  {-# INLINE ecctf #-}-  dcctf c = BT470_525 (fmap (igamma 2.2) (coerce c))-  {-# INLINE dcctf #-}+  gamut = Gamut (Primary 0.67 0.33)+                (Primary 0.21 0.71)+                (Primary 0.14 0.08)+  transfer = gamma (1 / 2.2)+  {-# INLINE transfer #-}+  itransfer = gamma 2.2+  {-# INLINE itransfer #-}  ------------------------------------ -- ITU-R BT.470 (625) --------------@@ -174,34 +172,16 @@  -- | ITU-R BT.470 (625) color space instance RedGreenBlue BT470_625 D65 where-  gamut = primaries625-  ecctf c = BT470_625 (fmap (gamma 2.8) (coerce c))-  {-# INLINE ecctf #-}-  dcctf c = BT470_625 (fmap (igamma 2.8) (coerce c))-  {-# INLINE dcctf #-}+  gamut = Gamut (Primary 0.64 0.33)+                (Primary 0.29 0.60)+                (Primary 0.15 0.06)+  transfer = gamma (1 / 2.8)+  {-# INLINE transfer #-}+  itransfer = gamma 2.8+  {-# INLINE itransfer #-} +-- | Gamma correction function gamma :: Floating a => a -> a -> a gamma p v = v ** p {-# INLINE gamma #-}--igamma :: Floating a => a -> a -> a-igamma p v = v ** (1 / p)-{-# INLINE igamma #-}---- | Primaries for ITU-R BT.470 (525).------ @since 0.1.0-primaries525 :: RealFloat e => Gamut rgb i e-primaries525 = Gamut (Primary 0.67 0.33)-                     (Primary 0.21 0.71)-                     (Primary 0.14 0.08)----- | Primaries for ITU-R BT.470 and BT.601 (625).------ @since 0.1.0-primaries625 :: RealFloat e => Gamut rgb i e-primaries625 = Gamut (Primary 0.64 0.33)-                     (Primary 0.29 0.60)-                     (Primary 0.15 0.06) 
src/Graphics/Color/Space/RGB/ITU/Rec601.hs view
@@ -5,10 +5,10 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NegativeLiterals #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module      : Graphics.Color.Space.RGB.ITU.Rec601@@ -24,21 +24,16 @@   , pattern BT601_625   , BT601_625   , D65-  , primaries525-  , primaries625-  , transfer-  , itransfer-  , module Graphics.Color.Space   ) where -import Data.Coerce import Data.Typeable import Foreign.Storable import Graphics.Color.Illuminant.ITU.Rec601 import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space-import Graphics.Color.Space.RGB.ITU.Rec470 (primaries625)+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal+import Graphics.Color.Space.RGB.ITU.Rec470 (BT470_625) import Graphics.Color.Space.RGB.Luma  @@ -110,11 +105,13 @@  -- | ITU-R BT.601 (525) color space instance RedGreenBlue BT601_525 D65 where-  gamut = primaries525-  ecctf = BT601_525 . fmap transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = BT601_525 . fmap itransfer . coerce-  {-# INLINE dcctf #-}+  gamut = Gamut (Primary 0.630 0.340)+                (Primary 0.310 0.595)+                (Primary 0.155 0.070)+  transfer = transferRec601+  {-# INLINE transfer #-}+  itransfer = itransferRec601+  {-# INLINE itransfer #-}  ------------------------------------ -- ITU-R BT.601 (625) --------------@@ -182,11 +179,11 @@  -- | ITU-R BT.601 (625) color space instance RedGreenBlue BT601_625 D65 where-  gamut = primaries625-  ecctf = BT601_625 . fmap transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = BT601_625 . fmap itransfer . coerce-  {-# INLINE dcctf #-}+  gamut = coerceGamut (gamut @_ @BT470_625)+  transfer = transferRec601+  {-# INLINE transfer #-}+  itransfer = itransferRec601+  {-# INLINE itransfer #-}  instance Luma BT601_525 where   rWeight = 0.299@@ -210,11 +207,11 @@ -- \] -- -- @since 0.1.0-transfer :: (Ord a, Floating a) => a -> a-transfer l+transferRec601 :: (Ord a, Floating a) => a -> a+transferRec601 l   | l < 0.018 = 4.5 * l   | otherwise = 1.099 * (l ** 0.45 {- ~ 1 / 2.2 -}) - 0.099-{-# INLINE transfer #-}+{-# INLINE transferRec601 #-}  -- | Rec.601 inverse transfer function "gamma". This is a helper function, therefore `dcctf` should -- be used instead.@@ -226,21 +223,12 @@ --   \end{cases} -- \] ----- @since 0.1.0-itransfer :: (Ord a, Floating a) => a -> a-itransfer e+itransferRec601 :: (Ord a, Floating a) => a -> a+itransferRec601 e   | e < inv0018 = e / 4.5   | otherwise = ((e + 0.099) / 1.099) ** (1 / 0.45)-  where-    !inv0018 = transfer 0.018 -- ~ 0.081-{-# INLINE itransfer #-}-+{-# INLINE itransferRec601 #-} --- | Primaries for ITU-R BT.601 (525).------ @since 0.1.0-primaries525 :: RealFloat e => Gamut rgb i e-primaries525 = Gamut (Primary 0.630 0.340)-                     (Primary 0.310 0.595)-                     (Primary 0.155 0.070)+inv0018 :: (Ord a, Floating a) => a+inv0018 = transferRec601 0.018 -- ~ 0.081 
src/Graphics/Color/Space/RGB/ITU/Rec709.hs view
@@ -4,10 +4,10 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NegativeLiterals #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module      : Graphics.Color.Space.RGB.ITU.Rec709@@ -21,19 +21,15 @@   ( pattern BT709   , BT709   , D65-  , primaries-  , Rec601.transfer-  , Rec601.itransfer-  , module Graphics.Color.Space   ) where -import Data.Coerce import Data.Typeable import Foreign.Storable import Graphics.Color.Model.Internal import qualified Graphics.Color.Model.RGB as CM-import Graphics.Color.Space-import Graphics.Color.Space.RGB.ITU.Rec601 as Rec601 (D65, itransfer, transfer)+import Graphics.Color.Space.Internal+import Graphics.Color.Space.RGB.Internal+import Graphics.Color.Space.RGB.ITU.Rec601 as Rec601 (D65, BT601_625) import Graphics.Color.Space.RGB.Luma  -- | [ITU-R BT.709](https://en.wikipedia.org/wiki/Rec._709) color space@@ -98,20 +94,13 @@  -- | ITU-R BT.709 color space instance RedGreenBlue BT709 D65 where-  gamut = primaries-  ecctf = BT709 . fmap Rec601.transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = BT709 . fmap Rec601.itransfer . coerce-  {-# INLINE dcctf #-}----- | Primaries for ITU-R BT.709, which are also the primaries for sRGB color space.------ @since 0.1.0-primaries :: RealFloat e => Gamut rgb i e-primaries = Gamut (Primary 0.64 0.33)-                  (Primary 0.30 0.60)-                  (Primary 0.15 0.06)+  gamut = Gamut (Primary 0.64 0.33)+                (Primary 0.30 0.60)+                (Primary 0.15 0.06)+  transfer = transfer @_ @BT601_625+  {-# INLINE transfer #-}+  itransfer = itransfer @_ @BT601_625+  {-# INLINE itransfer #-}   instance Luma BT709 where
src/Graphics/Color/Space/RGB/Internal.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DefaultSignatures #-}@@ -6,12 +7,12 @@ {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE ViewPatterns #-}@@ -28,7 +29,10 @@   , pattern ColorRGBA   , RedGreenBlue(..)   , Linearity(..)+  , ecctf+  , dcctf   , Gamut(..)+  , coerceGamut   , rgb2xyz   , rgbLinear2xyz   , xyz2rgb@@ -44,7 +48,7 @@   , rgbColorGamut   , pixelWhitePoint   , gamutWhitePoint-  , module Graphics.Color.Algebra+  , module Graphics.Color.Space.Internal   ) where  import Data.Coerce@@ -60,22 +64,21 @@   -- the __@i@__ type parameter   gamut :: RealFloat e => Gamut cs i e -  -- | Encoding color component transfer function (inverse). Also known as opto-electronic-  -- transfer function (OETF / OECF) or gamma function.-  ecctf :: (RealFloat a, Elevator a) => Color (cs 'Linear) a -> Color (cs 'NonLinear) a+  -- | @since 0.3.0+  transfer :: RealFloat e => e -> e -  -- | Decoding color component transfer function (forward)-  dcctf :: (RealFloat a, Elevator a) => Color (cs 'NonLinear) a -> Color (cs 'Linear) a+  -- | @since 0.3.0+  itransfer :: RealFloat e => e -> e    -- | Normalized primary matrix for this RGB color space. Default implementation derives   -- it from `chromaticity`-  npm :: (ColorSpace (cs 'Linear) i a, RealFloat a) => NPM cs a+  npm :: (ColorSpace (cs 'Linear) i e, RealFloat e) => NPM cs e   npm = npmDerive gamut   {-# INLINE npm #-}    -- | Inverse normalized primary matrix for this RGB color space. Default implementation   -- derives it from `chromaticity`-  inpm :: (ColorSpace (cs 'Linear) i a, RealFloat a) => INPM cs a+  inpm :: (ColorSpace (cs 'Linear) i e, RealFloat e) => INPM cs e   inpm = inpmDerive gamut   {-# INLINE inpm #-} @@ -91,8 +94,16 @@     Coercible (Color (cs l) e) (Color CM.RGB e) => Color (cs l) e -> Color CM.RGB e   unColorRGB = coerce +-- | This function allows for creating a completely mismatched color space spec. Make+-- sure you know what you are doing, if you need to use it.+--+-- @since 0.3.0+coerceGamut :: Gamut cs' i' e -> Gamut cs i e+coerceGamut (Gamut r g b) = Gamut (coerce r) (coerce g) (coerce b) -data Gamut cs i e = Gamut++-- | RGB color space gamut specification.+data Gamut (cs :: Linearity -> Type) i e = Gamut   { gamutRedPrimary   :: !(Primary i e)   , gamutGreenPrimary :: !(Primary i e)   , gamutBluePrimary  :: !(Primary i e)@@ -112,9 +123,35 @@ -- its type carries enough information for this operation. -- -- @since 0.1.0-gamutWhitePoint :: (RedGreenBlue cs i, RealFloat e) => Gamut cs i e -> WhitePoint i e+gamutWhitePoint ::+     forall cs e i. (RedGreenBlue cs i, RealFloat e)+  => Gamut cs i e+  -> WhitePoint i e gamutWhitePoint _ = whitePoint {-# INLINE gamutWhitePoint #-}+++-- | Encoding color component transfer function (forward). Also known as opto-electronic+-- transfer function (OETF / OECF).+--+-- @since 0.1.0+ecctf ::+     forall cs e i. (RedGreenBlue cs i, RealFloat e)+  => Color (cs 'Linear) e+  -> Color (cs 'NonLinear) e+ecctf = mkColorRGB . fmap (transfer @_ @cs) . unColorRGB+{-# INLINE ecctf #-}++-- | Decoding color component transfer function (inverse).  Also known as electro-optical+-- transfer function (EOTF / EOCF).+--+-- @since 0.1.0+dcctf ::+     forall cs e i. (RedGreenBlue cs i, RealFloat e)+  => Color (cs 'NonLinear) e+  -> Color (cs 'Linear) e+dcctf = mkColorRGB . fmap (itransfer @_ @cs) . unColorRGB+{-# INLINE dcctf #-}   -- | Linear transformation of a pixel in a linear RGB color space into XYZ color space
src/Graphics/Color/Space/RGB/Luma.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -10,7 +9,9 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-} -- | -- Module      : Graphics.Color.Space.RGB.Luma -- Copyright   : (c) Alexey Kuleshevich 2018-2020@@ -30,14 +31,17 @@   , Weights(..)   , rgbLuma   , rgbLumaWeights+  , toBaseLinearSpace   ) where -import Data.Kind import Data.Coerce+import Data.Kind+import Data.Typeable import Foreign.Storable-import Graphics.Color.Model.RGB as CM import Graphics.Color.Model.Internal-import Graphics.Color.Model.Y as CM+import Graphics.Color.Model.RGB as CM+import Graphics.Color.Model.X as CM+import Graphics.Color.Space.Internal import Graphics.Color.Space.RGB.Internal  -------------@@ -46,54 +50,86 @@  -- | [Luma](https://en.wikipedia.org/wiki/Luma_(video\)) of a non-linear gamma corrected -- RGB color space. (Not to be confused with luminance `Y`)-data Y'+data Y' (cs :: Linearity -> Type)  -- | Constructor for Luma.-newtype instance Color Y' e = Luma (CM.Color CM.Y e)+newtype instance Color (Y' cs) e = Luma (CM.Color CM.X e)  -- | Constructor for Luma `Y'`. (Not to be confused with luminance `Y`) -- -- @since 0.1.0-pattern Y' :: e -> Color Y' e-pattern Y' y = Luma (CM.Y y)+pattern Y' :: e -> Color (Y' cs) e+pattern Y' y = Luma (CM.X y) {-# COMPLETE Y' #-}  -- | Constructor for `Y'` with alpha channel. (Not to be confused with luminance `Y`) -- -- @since 0.1.4-pattern Y'A :: e -> e -> Color (Alpha Y') e-pattern Y'A y a = Alpha (Luma (CM.Y y)) a+pattern Y'A :: e -> e -> Color (Alpha (Y' cs)) e+pattern Y'A y a = Alpha (Luma (CM.X y)) a {-# COMPLETE Y'A #-}  -- | `Y'` - luma of a color space-deriving instance Eq e => Eq (Color Y' e)+deriving instance Eq e => Eq (Color (Y' cs) e) -- | `Y'` - luma of a color space-deriving instance Ord e => Ord (Color Y' e)+deriving instance Ord e => Ord (Color (Y' cs) e) -- | `Y'` - luma of a color space-deriving instance Functor (Color Y')+deriving instance Functor (Color (Y' cs)) -- | `Y'` - luma of a color space-deriving instance Applicative (Color Y')+deriving instance Applicative (Color (Y' cs)) -- | `Y'` - luma of a color space-deriving instance Foldable (Color Y')+deriving instance Foldable (Color (Y' cs)) -- | `Y'` - luma of a color space-deriving instance Traversable (Color Y')+deriving instance Traversable (Color (Y' cs)) -- | `Y'` - luma of a color space-deriving instance Storable e => Storable (Color Y' e)+deriving instance Storable e => Storable (Color (Y' cs) e)   -- | `Y'` - as a color model-instance Elevator e => Show (Color Y' e) where+instance (Typeable cs, Elevator e) => Show (Color (Y' cs) e) where   showsPrec _ = showsColorModel  -- | `Y'` - as a color model-instance Elevator e => ColorModel Y' e where-  type Components Y' e = e+instance (Typeable cs, Elevator e) => ColorModel (Y' cs) e where+  type Components (Y' cs) e = e   toComponents (Y' y) = y   {-# INLINE toComponents #-}   fromComponents = Y'   {-# INLINE fromComponents #-}  +instance ( Typeable cs+         , Illuminant i+         , ColorSpace (cs 'Linear) i e+         , ColorSpace (cs 'NonLinear) i e+         , Luma cs+         , RedGreenBlue cs i+         , RealFloat e+         ) =>+         ColorSpace (Y' cs) i e where+  type BaseModel (Y' cs) = CM.X+  type BaseSpace (Y' cs) = cs 'NonLinear+  toBaseSpace y = pure (coerce y :: e)+  {-# INLINE toBaseSpace #-}+  fromBaseSpace = rgbLuma+  {-# INLINE fromBaseSpace #-}+  luminance = luminance . toBaseLinearSpace+  {-# INLINE luminance #-}+  toColorXYZ = toColorXYZ . toBaseLinearSpace+  {-# INLINE toColorXYZ #-}++-- | Convert Luma directly into the linear version of base space. This is equivalent to+-- `dcctf . toBaseSpace`, but is a bit faster, since inverse transfer function is applied+-- only once+--+-- @since 0.3.0+toBaseLinearSpace ::+     forall cs e i. (RedGreenBlue cs i, Applicative (Color (cs 'Linear)), RealFloat e)+  => Color (Y' cs) e+  -> Color (cs 'Linear) e+toBaseLinearSpace y = pure (itransfer @_ @cs (coerce y :: e))+{-# INLINE toBaseLinearSpace #-}+ ------------------ -- Luma Weights -- ------------------@@ -135,7 +171,7 @@ rgbLuma ::      forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e)   => Color (cs 'NonLinear) e'-  -> Color Y' e+  -> Color (Y' cs) e rgbLuma rgb' = Y' (coerce (fmap toRealFloat rgb :: Color CM.RGB e) `dotProduct` coerce weights)   where     !rgb = unColorRGB rgb'
src/Graphics/Color/Space/RGB/SRGB.hs view
@@ -8,6 +8,7 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module      : Graphics.Color.Space.RGB.SRGB@@ -25,11 +26,6 @@   , SRGB   , D50   , D65-  , primaries-  , npmStandard-  , inpmStandard-  , transfer-  , itransfer   ) where  import Data.Coerce@@ -40,11 +36,50 @@ import qualified Graphics.Color.Model.RGB as CM import Graphics.Color.Space.Internal import Graphics.Color.Space.RGB.Internal-import Graphics.Color.Space.RGB.ITU.Rec709 (D65, primaries)+import Graphics.Color.Space.RGB.ITU.Rec709 (BT709, D65) import Graphics.Color.Space.RGB.Luma --- | The most common [sRGB](https://en.wikipedia.org/wiki/SRGB) color space with the--- default `D65` illuminant+-- | The most common [sRGB](https://en.wikipedia.org/wiki/SRGB) color space, which is+-- defined with:+--+-- * `D65` illuminant+--+-- * Transfer function:+--+-- \[+-- \gamma(u) = \begin{cases}+--     12.92 u & u \leq 0.0031308 \\+--     1.055 u^{1/2.4} - 0.055 & \text{otherwise}+--   \end{cases}+-- \]+--+-- * Inverse transfer function+--+-- \[+-- \gamma^{-1}(u) = \begin{cases}+--     u / 12.92 & u \leq 0.04045 \\+--     \left(\tfrac{u + 0.055}{1.055}\right)^{2.4} & \text{otherwise}+--   \end{cases}+-- \]+--+-- * Normalized primary matrix:+--+-- >>> :set -XDataKinds+-- >>> import Graphics.Color.Space.RGB+-- >>> npm :: NPM SRGB Float+-- [ [ 0.41240000, 0.35760000, 0.18050000 ]+-- , [ 0.21260000, 0.71520000, 0.07220000 ]+-- , [ 0.01930000, 0.11920000, 0.95050000 ] ]+--+-- * Inverse normalized primary matrix:+--+-- >>> :set -XDataKinds+-- >>> import Graphics.Color.Space.RGB+-- >>> inpm :: INPM SRGB Float+-- [ [ 3.24060000,-1.53720000,-0.49860000 ]+-- , [-0.96890000, 1.87580000, 0.04150000 ]+-- , [ 0.05570000,-0.20400000, 1.05700000 ] ]+-- data SRGB (l :: Linearity)  @@ -123,82 +158,23 @@  -- | `SRGB` color space instance RedGreenBlue SRGB D65 where-  gamut = primaries-  npm = npmStandard-  inpm = inpmStandard-  ecctf = SRGB . fmap transfer . coerce-  {-# INLINE ecctf #-}-  dcctf = SRGB . fmap itransfer . coerce-  {-# INLINE dcctf #-}+  gamut = coerce (gamut @_ @BT709)+  npm = NPM $ M3x3 (V3 0.4124 0.3576 0.1805)+                   (V3 0.2126 0.7152 0.0722)+                   (V3 0.0193 0.1192 0.9505)+  inpm = INPM $ M3x3 (V3  3.2406 -1.5372 -0.4986)+                     (V3 -0.9689  1.8758  0.0415)+                     (V3  0.0557 -0.2040  1.0570)+  transfer u+    | u <= 0.0031308 = 12.92 * u+    | otherwise = 1.055 * (u ** (1 / 2.4)) - 0.055+  {-# INLINE transfer #-}+  itransfer u+    | u <= 0.04045 = u / 12.92+    | otherwise = ((u + 0.055) / 1.055) ** 2.4+  {-# INLINE itransfer #-}  instance Luma SRGB where   rWeight = 0.299   gWeight = 0.587   bWeight = 0.114----- | sRGB normalized primary matrix. This is a helper definition, use `npm` instead.------ >>> :set -XDataKinds--- >>> import Graphics.Color.Space.RGB--- >>> npmStandard :: NPM SRGB Float--- [ [ 0.41240000, 0.35760000, 0.18050000 ]--- , [ 0.21260000, 0.71520000, 0.07220000 ]--- , [ 0.01930000, 0.11920000, 0.95050000 ] ]------ @since 0.1.0-npmStandard :: RealFloat a => NPM SRGB a-npmStandard = NPM $ M3x3 (V3 0.4124 0.3576 0.1805)-                         (V3 0.2126 0.7152 0.0722)-                         (V3 0.0193 0.1192 0.9505)----- | sRGB inverse normalized primary matrix. This is a helper definition, use `inpm` instead.------ >>> :set -XDataKinds--- >>> import Graphics.Color.Space.RGB--- >>> inpmStandard :: INPM SRGB Float--- [ [ 3.24060000,-1.53720000,-0.49860000 ]--- , [-0.96890000, 1.87580000, 0.04150000 ]--- , [ 0.05570000,-0.20400000, 1.05700000 ] ]------ @since 0.1.0-inpmStandard :: RealFloat a => INPM SRGB a-inpmStandard = INPM $ M3x3 (V3  3.2406 -1.5372 -0.4986)-                           (V3 -0.9689  1.8758  0.0415)-                           (V3  0.0557 -0.2040  1.0570)----- | sRGB transfer function "gamma". This is a helper function, therefore `ecctf` should be used--- instead.------ \[--- \gamma(u) = \begin{cases}---     12.92 u & u \leq 0.0031308 \\---     1.055 u^{1/2.4} - 0.055 & \text{otherwise}---   \end{cases}--- \]------ @since 0.1.0-transfer :: (Ord a, Floating a) => a -> a-transfer u-  | u <= 0.0031308 = 12.92 * u-  | otherwise = 1.055 * (u ** (1 / 2.4)) - 0.055-{-# INLINE transfer #-}---- | sRGB inverse transfer function "gamma". This is a helper function, therefore `dcctf` should--- be used instead.------ \[--- \gamma^{-1}(u) = \begin{cases}---     u / 12.92 & u \leq 0.04045 \\---     \left(\tfrac{u + 0.055}{1.055}\right)^{2.4} & \text{otherwise}---   \end{cases}--- \]------ @since 0.1.0-itransfer :: (Ord a, Floating a) => a -> a-itransfer u-  | u <= 0.04045 = u / 12.92-  | otherwise = ((u + 0.055) / 1.055) ** 2.4-{-# INLINE itransfer #-}
src/Graphics/Color/Standard/RAL.hs view
@@ -1,10 +1,7 @@-{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NegativeLiterals #-}-{-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeInType #-}@@ -237,9 +234,8 @@  import Data.Typeable import Graphics.Color.Space-import Graphics.Color.Space.CIE1976.LAB import Graphics.Color.Adaptation.VonKries-import Graphics.Color.Space.RGB.SRGB+import Graphics.Color.Algebra (showsType)  -- -- TODO: Find a home somewhere for this common illuminant -- data D50
src/Graphics/Pixel.hs view
@@ -11,8 +11,8 @@ -- Portability : non-portable -- module Graphics.Pixel-  ( Pixel(Pixel, PixelY, PixelRGB, PixelHSI, PixelHSL, PixelHSV,-      PixelCMYK, PixelYCbCr, PixelYA, PixelRGBA, PixelHSIA, PixelHSLA,+  ( Pixel(Pixel, PixelX, PixelRGB, PixelHSI, PixelHSL, PixelHSV,+      PixelCMYK, PixelYCbCr, PixelXA, PixelRGBA, PixelHSIA, PixelHSLA,       PixelHSVA, PixelCMYKA, PixelYCbCrA)   , liftPixel   , pixelColor@@ -34,9 +34,9 @@ -- | Constructor for a grayscale pixel with single channel. -- -- @since 0.1.0-pattern PixelY :: e -> Pixel Y e-pattern PixelY y = Pixel (ColorY y)-{-# COMPLETE PixelY #-}+pattern PixelX :: e -> Pixel X e+pattern PixelX y = Pixel (ColorX y)+{-# COMPLETE PixelX #-}  -- | Constructor for a pixel with @RGB@ color model. --@@ -84,9 +84,9 @@ -- | Constructor for a grayscale pixel with a transparency channel. -- -- @since 0.1.0-pattern PixelYA :: e -> e -> Pixel (Alpha Y) e-pattern PixelYA y a = Pixel (Alpha (ColorY y) a)-{-# COMPLETE PixelYA #-}+pattern PixelXA :: e -> e -> Pixel (Alpha X) e+pattern PixelXA y a = Pixel (Alpha (ColorX y) a)+{-# COMPLETE PixelXA #-}  -- | Constructor for a pixel with @RGB@ color model and Alpha channel. --
src/Graphics/Pixel/ColorSpace.hs view
@@ -1,7 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE ExplicitForAll #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE TypeFamilies #-}@@ -16,9 +15,9 @@ -- Portability : non-portable -- module Graphics.Pixel.ColorSpace-  ( Pixel(Pixel, PixelY, PixelXYZ, PixelRGB, PixelHSI, PixelHSL, PixelHSV,-      PixelCMYK, PixelYCbCr, PixelY', PixelYA, PixelXYZA, PixelRGBA, PixelHSIA, PixelHSLA,-      PixelHSVA, PixelCMYKA, PixelYCbCrA, PixelY'A)+  ( Pixel(Pixel, PixelY, PixelXYZ, PixelLAB, PixelRGB, PixelHSI, PixelHSL, PixelHSV,+      PixelCMYK, PixelY'CbCr, PixelY', PixelYA, PixelXYZA, PixelLABA, PixelRGBA, PixelHSIA, PixelHSLA,+      PixelHSVA, PixelCMYKA, PixelY'CbCrA, PixelY'A)   , liftPixel   , pixelColor   -- * Conversion@@ -45,29 +44,18 @@   -- ** sRGB color space   , pattern PixelSRGB   , pattern PixelSRGBA-  , SRGB-  , D65-  -- ** Adobe RGB color space-  , AdobeRGB   -- ** Luma   , rgbPixelLuma   -- * Re-export of color space   , module Graphics.Color.Space-  , module Graphics.Color.Space.RGB.Luma-  , module Graphics.Color.Space.RGB.Alternative   , module Graphics.Color.Algebra.Binary   ) where  import Data.Coerce import Graphics.Color.Adaptation.VonKries-import Graphics.Color.Model.Internal import Graphics.Color.Algebra.Binary import qualified Graphics.Color.Model.RGB as CM import Graphics.Color.Space-import Graphics.Color.Space.RGB.AdobeRGB-import Graphics.Color.Space.RGB.Alternative-import Graphics.Color.Space.RGB.SRGB-import Graphics.Color.Space.RGB.Luma import Graphics.Pixel.Internal  -- | Convert a pixel from one color space to any other.@@ -123,6 +111,7 @@ pattern PixelXYZ x y z = Pixel (XYZ (V3 x y z)) {-# COMPLETE PixelXYZ #-} + -- | Constructor for a pixel in @CIE1931 XYZ@ color space with Alpha channel -- -- @since 0.1.0@@ -131,6 +120,20 @@ {-# COMPLETE PixelXYZA #-}  +-- | Constructor for a pixel in @CIE1976 LAB@ color space+--+-- @since 0.3.0+pattern PixelLAB :: e -> e -> e -> Pixel (LAB i) e+pattern PixelLAB l' a' b' = Pixel (LAB (V3 l' a' b'))+{-# COMPLETE PixelLAB #-}++-- | Constructor for a pixel in @CIE1976 LAB@ color space with Alpha channel+--+-- @since 0.3.0+pattern PixelLABA :: e -> e -> e -> e -> Pixel (Alpha (LAB i)) e+pattern PixelLABA l' a' b' a = Pixel (Alpha (LAB (V3 l' a' b')) a)+{-# COMPLETE PixelLABA #-}+ -- | Constructor for a pixel in RGB color space. -- -- @since 0.1.0@@ -170,24 +173,24 @@ {-# COMPLETE PixelCMYK #-}  --- | Constructor for a pixel in @YCbCr@.+-- | Constructor for a pixel in @Y'CbCr@. -- -- @since 0.1.0-pattern PixelYCbCr :: e -> e -> e -> Pixel (YCbCr cs) e-pattern PixelYCbCr y cb cr = Pixel (ColorYCbCr y cb cr)-{-# COMPLETE PixelYCbCr #-}+pattern PixelY'CbCr :: e -> e -> e -> Pixel (Y'CbCr cs) e+pattern PixelY'CbCr y cb cr = Pixel (ColorY'CbCr y cb cr)+{-# COMPLETE PixelY'CbCr #-}  -- | Constructor for a pixel with Luma (not to be confused with luminance `Y`) -- -- @since 0.1.4-pattern PixelY' :: e -> Pixel Y' e+pattern PixelY' :: e -> Pixel (Y' cs) e pattern PixelY' y = Pixel (Y' y) {-# COMPLETE PixelY' #-}  -- | Constructor for a pixel with Luma and Alpha channel (not to be confused with luminance `Y`) -- -- @since 0.1.4-pattern PixelY'A :: e -> e -> Pixel (Alpha Y') e+pattern PixelY'A :: e -> e -> Pixel (Alpha (Y' cs)) e pattern PixelY'A y a = Pixel (Alpha (Y' y) a) {-# COMPLETE PixelY'A #-} @@ -232,18 +235,18 @@ {-# COMPLETE PixelCMYKA #-}  --- | Constructor for a pixel in @YCbCr@ with alpha channel.+-- | Constructor for a pixel in @Y'CbCr@ with alpha channel. -- -- @since 0.1.0-pattern PixelYCbCrA :: e -> e -> e -> e -> Pixel (Alpha (YCbCr cs)) e-pattern PixelYCbCrA y cb cr a = Pixel (ColorYCbCrA y cb cr a)-{-# COMPLETE PixelYCbCrA #-}+pattern PixelY'CbCrA :: e -> e -> e -> e -> Pixel (Alpha (Y'CbCr cs)) e+pattern PixelY'CbCrA y cb cr a = Pixel (ColorY'CbCrA y cb cr a)+{-# COMPLETE PixelY'CbCrA #-}  -- | Convert non-linear RGB color space into linear one -- -- @since 0.2.0 toPixelLinearRGB ::-     (RedGreenBlue cs i, Elevator e, RealFloat e) => Pixel (cs 'NonLinear) e -> Pixel (cs 'Linear) e+     (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'NonLinear) e -> Pixel (cs 'Linear) e toPixelLinearRGB = liftPixel dcctf {-# INLINE toPixelLinearRGB #-} @@ -251,7 +254,7 @@ -- -- @since 0.2.0 fromPixelLinearRGB ::-     (RedGreenBlue cs i, Elevator e, RealFloat e) => Pixel (cs 'Linear) e -> Pixel (cs 'NonLinear) e+     (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'Linear) e -> Pixel (cs 'NonLinear) e fromPixelLinearRGB = liftPixel ecctf {-# INLINE fromPixelLinearRGB #-} @@ -261,7 +264,7 @@ rgbPixelLuma ::      forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e)   => Pixel (cs 'NonLinear) e'-  -> Pixel Y' e+  -> Pixel (Y' cs) e rgbPixelLuma = liftPixel rgbLuma  -- | Compute luminance of a pixel color
src/Graphics/Pixel/Internal.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}@@ -6,6 +5,7 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_HADDOCK hide, not-home #-} -- | -- Module      : Graphics.Pixel.Internal -- Copyright   : (c) Alexey Kuleshevich 2019-2020@@ -23,12 +23,14 @@   , toPixel64   , toPixelF   , toPixelD+  , VU.MVector(MV_Pixel)+  , VU.Vector(V_Pixel)+  , module Graphics.Color.Model.Internal   ) where  import Data.Coerce import Control.DeepSeq (NFData) import Graphics.Color.Model.Internal-import Control.Monad (liftM) import Foreign.Storable import qualified Data.Vector.Generic as V import qualified Data.Vector.Generic.Mutable as VM@@ -74,12 +76,12 @@   {-# INLINE basicUnsafeSlice #-}   basicOverlaps (MV_Pixel mvec) (MV_Pixel mvec') = VM.basicOverlaps mvec mvec'   {-# INLINE basicOverlaps #-}-  basicUnsafeNew len = MV_Pixel `liftM` VM.basicUnsafeNew len+  basicUnsafeNew len = MV_Pixel <$> VM.basicUnsafeNew len   {-# INLINE basicUnsafeNew #-}   basicUnsafeReplicate len val =-    MV_Pixel `liftM` VM.basicUnsafeReplicate len (toComponents (coerce val))+    MV_Pixel <$> VM.basicUnsafeReplicate len (toComponents (coerce val))   {-# INLINE basicUnsafeReplicate #-}-  basicUnsafeRead (MV_Pixel mvec) idx = (coerce . fromComponents) `liftM` VM.basicUnsafeRead mvec idx+  basicUnsafeRead (MV_Pixel mvec) idx = coerce . fromComponents <$> VM.basicUnsafeRead mvec idx   {-# INLINE basicUnsafeRead #-}   basicUnsafeWrite (MV_Pixel mvec) idx val = VM.basicUnsafeWrite mvec idx (toComponents (coerce val))   {-# INLINE basicUnsafeWrite #-}@@ -91,26 +93,24 @@   {-# INLINE basicUnsafeCopy #-}   basicUnsafeMove (MV_Pixel mvec) (MV_Pixel mvec') = VM.basicUnsafeMove mvec mvec'   {-# INLINE basicUnsafeMove #-}-  basicUnsafeGrow (MV_Pixel mvec) len = MV_Pixel `liftM` VM.basicUnsafeGrow mvec len+  basicUnsafeGrow (MV_Pixel mvec) len = MV_Pixel <$> VM.basicUnsafeGrow mvec len   {-# INLINE basicUnsafeGrow #-}-#if MIN_VERSION_vector(0,11,0)   basicInitialize (MV_Pixel mvec) = VM.basicInitialize mvec   {-# INLINE basicInitialize #-}-#endif   newtype instance VU.Vector (Pixel cs e) = V_Pixel (VU.Vector (Components cs e))  instance (ColorModel cs e) => V.Vector VU.Vector (Pixel cs e) where-  basicUnsafeFreeze (MV_Pixel mvec) = V_Pixel `liftM` V.basicUnsafeFreeze mvec+  basicUnsafeFreeze (MV_Pixel mvec) = V_Pixel <$> V.basicUnsafeFreeze mvec   {-# INLINE basicUnsafeFreeze #-}-  basicUnsafeThaw (V_Pixel vec) = MV_Pixel `liftM` V.basicUnsafeThaw vec+  basicUnsafeThaw (V_Pixel vec) = MV_Pixel <$> V.basicUnsafeThaw vec   {-# INLINE basicUnsafeThaw #-}   basicLength (V_Pixel vec) = V.basicLength vec   {-# INLINE basicLength #-}   basicUnsafeSlice idx len (V_Pixel vec) = V_Pixel (V.basicUnsafeSlice idx len vec)   {-# INLINE basicUnsafeSlice #-}-  basicUnsafeIndexM (V_Pixel vec) idx = (coerce . fromComponents) `liftM` V.basicUnsafeIndexM vec idx+  basicUnsafeIndexM (V_Pixel vec) idx = coerce . fromComponents <$> V.basicUnsafeIndexM vec idx   {-# INLINE basicUnsafeIndexM #-}   basicUnsafeCopy (MV_Pixel mvec) (V_Pixel vec) = V.basicUnsafeCopy mvec vec   {-# INLINE basicUnsafeCopy #-}
tests/Graphics/Color/Illuminant/CIE1931Spec.hs view
@@ -8,6 +8,7 @@ import Graphics.Color.Space.Common import Graphics.Color.Illuminant.Common import Graphics.Color.Illuminant.CIE1931+import Graphics.Color.Algebra  spec :: Spec spec =
tests/Graphics/Color/Illuminant/Common.hs view
@@ -10,6 +10,8 @@ import Data.Proxy import Graphics.Color.Space import Graphics.Color.Model.Common+import GHC.TypeLits+import Graphics.Color.Algebra (showsType)   colorTemperatureExpectation ::
tests/Graphics/Color/Illuminant/WikipediaSpec.hs view
@@ -5,12 +5,13 @@ {-# LANGUAGE TypeApplications #-} module Graphics.Color.Illuminant.WikipediaSpec (spec) where +import qualified Data.Colour.CIE as Colour+import qualified Data.Colour.CIE.Illuminant as Colour import Data.Proxy-import Graphics.Color.Space.Common+import Graphics.Color.Algebra (showsType) import Graphics.Color.Illuminant.Common import Graphics.Color.Illuminant.Wikipedia-import qualified Data.Colour.CIE as Colour-import qualified Data.Colour.CIE.Illuminant as Colour+import Graphics.Color.Space.Common  shouldMatch ::      forall i. Illuminant i
tests/Graphics/Color/Space/CIE1931/RGBSpec.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-}
tests/Graphics/Color/Space/CIE1976/LABSpec.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-}@@ -11,10 +10,9 @@ import qualified Data.Colour.SRGB as Colour import Graphics.Color.Illuminant.CIE1931 as I2 import qualified Graphics.Color.Illuminant.Wikipedia as W-import Graphics.Color.Space.CIE1976.LAB import Graphics.Color.Space.Common import Graphics.Color.Space.RGB.Derived.SRGBSpec ()-import Graphics.Color.Space.RGB.Derived.SRGB+import Graphics.Color.Space.RGB.Derived.SRGB as D  instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (LAB (i :: k)) e) where   arbitrary = ColorLAB <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator@@ -28,9 +26,9 @@     prop "lab2srgb" $ \lab@(ColorLAB l' a' b' :: Color (LAB 'W.D65) Double) ->       case Colour.toSRGB (Colour.cieLAB Colour.d65 l' a' b') of         Colour.RGB r g b ->-          (convertColor lab :: Color (SRGB 'W.D65 'NonLinear) Double)+          (convertColor lab :: Color (D.SRGB 'W.D65 'NonLinear) Double)           `epsilonEqColorDouble` ColorRGB r g b-    prop "srgb2xlab" $ \rgb@(ColorRGB r g b :: Color (SRGB 'W.D65 'NonLinear) Double) ->+    prop "srgb2xlab" $ \rgb@(ColorRGB r g b :: Color (D.SRGB 'W.D65 'NonLinear) Double) ->       case Colour.cieLABView Colour.d65 (Colour.sRGB r g b) of         (l', a', b') ->           convertColor rgb `epsilonEqColorDouble` (ColorLAB l' a' b' :: Color (LAB 'W.D65) Double)
tests/Graphics/Color/Space/RGB/AdobeRGBSpec.hs view
@@ -4,7 +4,6 @@ module Graphics.Color.Space.RGB.AdobeRGBSpec (spec, arbitraryElevator) where  import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.AdobeRGB  instance (Elevator e, Random e) => Arbitrary (Color (AdobeRGB l) e) where   arbitrary = ColorRGB <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator
tests/Graphics/Color/Space/RGB/Alternative/CMYKSpec.hs view
@@ -5,9 +5,7 @@ module Graphics.Color.Space.RGB.Alternative.CMYKSpec (spec) where  import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.SRGB import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived-import Graphics.Color.Space.RGB.Alternative.CMYK import Graphics.Color.Space.RGB.Derived.SRGBSpec ()  
tests/Graphics/Color/Space/RGB/Alternative/HSISpec.hs view
@@ -4,9 +4,7 @@ module Graphics.Color.Space.RGB.Alternative.HSISpec (spec) where  import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.SRGB-import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived-import Graphics.Color.Space.RGB.Alternative.HSI+import qualified Graphics.Color.Space.RGB.Derived.SRGB as D import Graphics.Color.Space.RGB.SRGBSpec () import Graphics.Color.Space.RGB.Derived.SRGBSpec () @@ -18,5 +16,5 @@ spec =   describe "HSI" $ do     describe "Derived-sRGB" $ do-      colorModelSpec @(HSI (Derived.SRGB D65 'NonLinear)) @Word "HSI"-      colorSpaceSpec @(HSI (Derived.SRGB D65 'NonLinear)) @Double+      colorModelSpec @(HSI (D.SRGB D65 'NonLinear)) @Word "HSI"+      colorSpaceSpec @(HSI (D.SRGB D65 'NonLinear)) @Double
tests/Graphics/Color/Space/RGB/Alternative/HSLSpec.hs view
@@ -4,9 +4,7 @@ module Graphics.Color.Space.RGB.Alternative.HSLSpec (spec) where  import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.SRGB-import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived-import Graphics.Color.Space.RGB.Alternative.HSL+import qualified Graphics.Color.Space.RGB.Derived.SRGB as D import Graphics.Color.Space.RGB.SRGBSpec () import Graphics.Color.Space.RGB.Derived.SRGBSpec () @@ -18,5 +16,5 @@ spec =   describe "HSL" $ do     describe "Derived-sRGB" $ do-      colorModelSpec @(HSL (Derived.SRGB D65 'NonLinear)) @Word "HSL"-      colorSpaceSpec @(HSL (Derived.SRGB D65 'NonLinear)) @Double+      colorModelSpec @(HSL (D.SRGB D65 'NonLinear)) @Word "HSL"+      colorSpaceSpec @(HSL (D.SRGB D65 'NonLinear)) @Double
tests/Graphics/Color/Space/RGB/Alternative/HSVSpec.hs view
@@ -4,9 +4,7 @@ module Graphics.Color.Space.RGB.Alternative.HSVSpec (spec) where  import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.SRGB-import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived-import Graphics.Color.Space.RGB.Alternative.HSV+import qualified Graphics.Color.Space.RGB.Derived.SRGB as D import Graphics.Color.Space.RGB.SRGBSpec () import Graphics.Color.Space.RGB.Derived.SRGBSpec () @@ -18,7 +16,7 @@ spec =   describe "HSV" $ do     describe "Derived-sRGB" $ do-      colorModelSpec @(HSV (Derived.SRGB D65 'NonLinear)) @Word "HSV"-      colorSpaceSpec @(HSV (Derived.SRGB D65 'NonLinear)) @Double-      colorModelSpec @(HSV (Derived.SRGB D65 'Linear)) @Int "HSV"-      colorSpaceSpec @(HSV (Derived.SRGB D65 'Linear)) @Float+      colorModelSpec @(HSV (D.SRGB D65 'NonLinear)) @Word "HSV"+      colorSpaceSpec @(HSV (D.SRGB D65 'NonLinear)) @Double+      colorModelSpec @(HSV (D.SRGB D65 'Linear)) @Int "HSV"+      colorSpaceSpec @(HSV (D.SRGB D65 'Linear)) @Float
tests/Graphics/Color/Space/RGB/Alternative/YCbCrSpec.hs view
@@ -7,43 +7,41 @@  import qualified Codec.Picture.Types as JuicyPixels import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.SRGB import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived-import Graphics.Color.Space.RGB.Alternative.YCbCr import Graphics.Color.Space.RGB.SRGBSpec () import Graphics.Color.Space.RGB.Derived.SRGBSpec ()  -instance (Elevator e, Random e) => Arbitrary (Color (YCbCr cs) e) where+instance (Elevator e, Random e) => Arbitrary (Color (Y'CbCr cs) e) where   arbitrary =-    ColorYCbCr <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator+    ColorY'CbCr <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator  -- Accurate roundtrip to/from both XYZ and SRGB is not possible due to the nature of the -- algorithm. spec :: Spec spec =-  describe "YCbCr" $ do+  describe "Y'CbCr" $ do     describe "sRGB" $ do-      colorModelSpec @(YCbCr (SRGB 'NonLinear)) @Word "YCbCr"-      colorSpaceCommonSpec @(YCbCr (SRGB 'NonLinear)) @Double $ pure ()+      colorModelSpec @(Y'CbCr SRGB) @Word "Y'CbCr"+      colorSpaceCommonSpec @(Y'CbCr SRGB) @Double $ pure ()     describe "Derived-sRGB" $ do-      colorModelSpec @(YCbCr (Derived.SRGB D65 'NonLinear)) @Word "YCbCr"-      colorSpaceCommonSpec @(YCbCr (Derived.SRGB D65 'NonLinear)) @Double $ pure ()-    prop "toColorYCbCr . toColorYCbCr" $ \(rgb :: Color (Derived.SRGB D65 'NonLinear) Double) ->+      colorModelSpec @(Y'CbCr (Derived.SRGB D65)) @Word "Y'CbCr"+      colorSpaceCommonSpec @(Y'CbCr (Derived.SRGB D65)) @Double $ pure ()+    prop "toColorY'CbCr . toColorY'CbCr" $ \(rgb :: Color (Derived.SRGB D65 'NonLinear) Double) ->       rgb `epsilonEqColor`-      fromColorYCbCr (toColorYCbCr rgb :: Color (YCbCr (Derived.SRGB D65 'NonLinear)) Double)-    prop "toColorYCbCr == srgb2ycbcr" $ \(rgb :: Color (SRGB 'NonLinear) Double) ->+      fromColorY'CbCr (toColorY'CbCr rgb :: Color (Y'CbCr (Derived.SRGB D65)) Double)+    prop "toColorY'CbCr == srgb2ycbcr" $ \(rgb :: Color (SRGB 'NonLinear) Double) ->       srgb2ycbcr rgb `epsilonEqColor`-      (toColorYCbCr rgb :: Color (YCbCr (SRGB 'NonLinear)) Double)-    prop "fromColorYCbCr == ycbcr2srgb" $ \(ycbcr :: Color (YCbCr (SRGB 'NonLinear)) Double) ->-      ycbcr2srgb ycbcr `epsilonEqColor` (fromColorYCbCr ycbcr :: Color (SRGB 'NonLinear) Double)+      (toColorY'CbCr rgb :: Color (Y'CbCr SRGB) Double)+    prop "fromColorY'CbCr == ycbcr2srgb" $ \(ycbcr :: Color (Y'CbCr SRGB) Double) ->+      ycbcr2srgb ycbcr `epsilonEqColor` (fromColorY'CbCr ycbcr :: Color (SRGB 'NonLinear) Double)     describe "Match JuicyPixels" $ do       prop "rgb2ycbcr" $ \(rgb@(ColorRGB r g b) :: Color (SRGB 'NonLinear) Word8) ->         case JuicyPixels.convertPixel (JuicyPixels.PixelRGB8 r g b) of           JuicyPixels.PixelYCbCr8 y cb cr ->-            (fromBaseSpace rgb :: Color (YCbCr (SRGB 'NonLinear)) Word8)-            `approxIntegralColorExpect1` ColorYCbCr y cb cr-      prop "ycbcr2rgb" $ \(ycbcr@(ColorYCbCr y cb cr) :: Color (YCbCr (SRGB 'NonLinear)) Word8) ->+            (fromBaseSpace rgb :: Color (Y'CbCr SRGB) Word8)+            `approxIntegralColorExpect1` ColorY'CbCr y cb cr+      prop "ycbcr2rgb" $ \(ycbcr@(ColorY'CbCr y cb cr) :: Color (Y'CbCr SRGB) Word8) ->         case JuicyPixels.convertPixel (JuicyPixels.PixelYCbCr8 y cb cr) of           JuicyPixels.PixelRGB8 r g b ->-            (toBaseSpace ycbcr) `approxIntegralColorExpect1` ColorRGB r g b+            toBaseSpace ycbcr `approxIntegralColorExpect1` ColorRGB r g b
tests/Graphics/Color/Space/RGB/Derived/AdobeRGBSpec.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-}@@ -8,15 +7,15 @@  import Graphics.Color.Illuminant.CIE1931 import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.Derived.AdobeRGB+import qualified Graphics.Color.Space.RGB.Derived.AdobeRGB as D -instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (AdobeRGB (i :: k) l) e) where+instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (D.AdobeRGB (i :: k) l) e) where   arbitrary = ColorRGB <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator   spec :: Spec spec = describe "AdobeRGB" $ do-  colorModelSpec @(AdobeRGB 'D65 'NonLinear) @Word "AdobeRGB CIE1931 'D65 'NonLinear"-  colorSpaceSpec @(AdobeRGB 'D65 'NonLinear) @Float-  colorModelSpec @(AdobeRGB 'D50 'Linear) @Int "AdobeRGB CIE1931 'D50 'Linear"-  colorSpaceSpec @(AdobeRGB 'D50 'Linear) @Double+  colorModelSpec @(D.AdobeRGB 'D65 'NonLinear) @Word "AdobeRGB CIE1931 'D65 'NonLinear"+  colorSpaceSpec @(D.AdobeRGB 'D65 'NonLinear) @Float+  colorModelSpec @(D.AdobeRGB 'D50 'Linear) @Int "AdobeRGB CIE1931 'D50 'Linear"+  colorSpaceSpec @(D.AdobeRGB 'D50 'Linear) @Double
tests/Graphics/Color/Space/RGB/Derived/CIERGBSpec.hs view
@@ -1,21 +1,20 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Graphics.Color.Space.RGB.Derived.CIERGBSpec (spec) where  import Graphics.Color.Illuminant.CIE1931-import Graphics.Color.Space.RGB.Derived.CIERGB+import qualified Graphics.Color.Space.RGB.Derived.CIERGB as D import Graphics.Color.Space.Common -instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (CIERGB (i :: k) l) e) where+instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (D.CIERGB (i :: k) l) e) where   arbitrary = ColorRGB <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator  spec :: Spec spec = describe "RGB" $ do-  colorModelSpec @(CIERGB 'E 'NonLinear) @Word "CIERGB CIE1931 'E 'NonLinear"-  colorSpaceSpec @(CIERGB 'E 'NonLinear) @Float-  colorModelSpec @(CIERGB 'D75 'Linear) @Int "CIERGB CIE1931 'D75 'Linear"-  colorSpaceSpec @(CIERGB 'D75 'Linear) @Double+  colorModelSpec @(D.CIERGB 'E 'NonLinear) @Word "CIERGB CIE1931 'E 'NonLinear"+  colorSpaceSpec @(D.CIERGB 'E 'NonLinear) @Float+  colorModelSpec @(D.CIERGB 'D75 'Linear) @Int "CIERGB CIE1931 'D75 'Linear"+  colorSpaceSpec @(D.CIERGB 'D75 'Linear) @Double
tests/Graphics/Color/Space/RGB/Derived/SRGBSpec.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-}@@ -12,35 +11,35 @@ import Graphics.Color.Illuminant.CIE1931 import qualified Graphics.Color.Illuminant.Wikipedia as W import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.Derived.SRGB+import Graphics.Color.Space.RGB.Derived.SRGB as D -instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (SRGB (i :: k) l) e) where+instance (Elevator e, Random e, Illuminant i) => Arbitrary (Color (D.SRGB (i :: k) l) e) where   arbitrary = ColorRGB <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator   spec :: Spec spec = describe "SRGB" $ do-  colorModelSpec @(SRGB 'D65 'NonLinear) @Word "SRGB CIE1931 'D65 'NonLinear"-  colorSpaceSpec @(SRGB 'D65 'NonLinear) @Float-  colorModelSpec @(SRGB 'D55 'Linear) @Int "SRGB CIE1931 'D55 'Linear"-  colorSpaceSpec @(SRGB 'D55 'Linear) @Double+  colorModelSpec @(D.SRGB 'D65 'NonLinear) @Word "SRGB CIE1931 'D65 'NonLinear"+  colorSpaceSpec @(D.SRGB 'D65 'NonLinear) @Float+  colorModelSpec @(D.SRGB 'D55 'Linear) @Int "SRGB CIE1931 'D55 'Linear"+  colorSpaceSpec @(D.SRGB 'D55 'Linear) @Double   describe "Same as colour package" $ do     prop "xyz2srgb" $ \xyz@(ColorXYZ x y z :: Color (XYZ 'W.D65) Double) ->       case Colour.toSRGB (Colour.cieXYZ x y z) of         Colour.RGB r g b ->-          (fromColorXYZ xyz :: Color (SRGB 'W.D65 'NonLinear) Double)+          (fromColorXYZ xyz :: Color (D.SRGB 'W.D65 'NonLinear) Double)           `epsilonEqColorDouble`           ColorRGB r g b     prop "xyz2linearsrgb" $ \xyz@(ColorXYZ x y z :: Color (XYZ 'W.D65 ) Double) ->       case Colour.toRGB (Colour.cieXYZ x y z) of         Colour.RGB r g b ->-          dcctf (fromColorXYZ xyz :: Color (SRGB 'W.D65 'NonLinear) Double) `epsilonEqColorDouble`+          dcctf (fromColorXYZ xyz :: Color (D.SRGB 'W.D65 'NonLinear) Double) `epsilonEqColorDouble`           ColorRGB r g b-    prop "srgb2xyz" $ \rgb@(ColorRGB r g b :: Color (SRGB 'W.D65 'NonLinear) Double) ->+    prop "srgb2xyz" $ \rgb@(ColorRGB r g b :: Color (D.SRGB 'W.D65 'NonLinear) Double) ->       case Colour.cieXYZView (Colour.sRGB r g b) of         (x, y, z) ->           toColorXYZ rgb `epsilonEqColorDouble` ColorXYZ x y z-    prop "linersrgb2xyz" $ \rgb@(ColorRGB r g b :: Color (SRGB 'W.D65 'Linear) Double) ->+    prop "linersrgb2xyz" $ \rgb@(ColorRGB r g b :: Color (D.SRGB 'W.D65 'Linear) Double) ->       case Colour.cieXYZView (Colour.rgb r g b) of         (x, y, z) ->           toColorXYZ (ecctf rgb) `epsilonEqColorDouble` ColorXYZ x y z
tests/Graphics/Color/Space/RGB/SRGBSpec.hs view
@@ -4,7 +4,6 @@ module Graphics.Color.Space.RGB.SRGBSpec (spec, arbitraryElevator) where  import Graphics.Color.Space.Common-import Graphics.Color.Space.RGB.SRGB  instance (Elevator e, Random e) => Arbitrary (Color (SRGB l) e) where   arbitrary = ColorRGB <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator
tests/Graphics/Color/Standard/RALSpec.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -18,9 +17,7 @@ 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  @@ -48,7 +45,7 @@           let mkTest expected (rname, received) =                 it rname $ do                   when (rname `elem` pendingNames) $ pendingWith "Some discrepancy"-                  (expect received expected)+                  expect received expected           zipWithM_ mkTest expectedColors receivedColors     it "Color ShowS" $ do       show (RAL :: RAL "GreenBeige") `shouldBe` "RAL \"GreenBeige\""