-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Import/export of Image files into massiv Arrays
--   
--   This package contains functionality for import/export of arrays into
--   the real world. For now it only has the ability to read/write image
--   files in various formats.
@package massiv-io
@version 0.1.4.0


module Graphics.ColorSpace.HSI

-- | Hue, Saturation and Intensity color space.
data HSI

-- | Hue
HueHSI :: HSI

-- | Saturation
SatHSI :: HSI

-- | Intensity
IntHSI :: HSI

-- | Hue, Saturation and Intensity color space with Alpha channel.
data HSIA

-- | Hue
HueHSIA :: HSIA

-- | Saturation
SatHSIA :: HSIA

-- | Intensity
IntHSIA :: HSIA

-- | Alpha
AlphaHSIA :: HSIA

-- | A Pixel family with a color space and a precision of elements.
instance GHC.Enum.Bounded Graphics.ColorSpace.HSI.HSIA
instance GHC.Show.Show Graphics.ColorSpace.HSI.HSIA
instance GHC.Enum.Enum Graphics.ColorSpace.HSI.HSIA
instance GHC.Classes.Eq Graphics.ColorSpace.HSI.HSIA
instance GHC.Enum.Bounded Graphics.ColorSpace.HSI.HSI
instance GHC.Show.Show Graphics.ColorSpace.HSI.HSI
instance GHC.Enum.Enum Graphics.ColorSpace.HSI.HSI
instance GHC.Classes.Eq Graphics.ColorSpace.HSI.HSI
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.AlphaSpace Graphics.ColorSpace.HSI.HSIA e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSIA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.HSI.HSI e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.HSI.HSI e)


module Graphics.ColorSpace.Complex

-- | Complex numbers are an algebraic type.
--   
--   For a complex number <tt>z</tt>, <tt><a>abs</a> z</tt> is a number
--   with the magnitude of <tt>z</tt>, but oriented in the positive real
--   direction, whereas <tt><a>signum</a> z</tt> has the phase of
--   <tt>z</tt>, but unit magnitude.
--   
--   The <a>Foldable</a> and <a>Traversable</a> instances traverse the real
--   part first.
data Complex a

-- | forms a complex number from its real and imaginary rectangular
--   components.
(:+) :: !a -> !a -> Complex a

-- | Constrcut a complex pixel from two pixels representing real and
--   imaginary parts.
--   
--   <pre>
--   PixelRGB 4 8 6 <a>+:</a> PixelRGB 7 1 1 <b>==</b> PixelRGB (4 <a>:+</a> 7) (8 <a>:+</a> 1) (6 <a>:+</a> 1)
--   </pre>
(+:) :: ColorSpace cs e => Pixel cs e -> Pixel cs e -> Pixel cs (Complex e)
infix 6 +:

-- | Extracts the real part of a complex pixel.
realPart :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e

-- | Extracts the imaginary part of a complex pixel.
imagPart :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e

-- | Form a complex pixel from polar components of magnitude and phase.
mkPolar :: (ColorSpace cs e, RealFloat e) => Pixel cs e -> Pixel cs e -> Pixel cs (Complex e)

-- | <tt><a>cis</a> t</tt> is a complex pixel with magnitude 1 and phase t
--   (modulo <tt>2*<a>pi</a></tt>).
cis :: (ColorSpace cs e, RealFloat e) => Pixel cs e -> Pixel cs (Complex e)

-- | The function <tt><a>polar</a></tt> takes a complex pixel and returns a
--   (magnitude, phase) pair of pixels in canonical form: the magnitude is
--   nonnegative, and the phase in the range <tt>(-<a>pi</a>,
--   <a>pi</a>]</tt>; if the magnitude is zero, then so is the phase.
polar :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> (Pixel cs e, Pixel cs e)

-- | The nonnegative magnitude of a complex pixel.
magnitude :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e

-- | The phase of a complex pixel, in the range <tt>(-<a>pi</a>,
--   <a>pi</a>]</tt>. If the magnitude is zero, then so is the phase.
phase :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e

-- | The conjugate of a complex pixel.
conjugate :: (ColorSpace cs e, RealFloat e) => Pixel cs (Complex e) -> Pixel cs (Complex e)


module Graphics.ColorSpace.CMYK

-- | Cyan, Magenta, Yellow and Black color space.
data CMYK

-- | Cyan
CyanCMYK :: CMYK

-- | Magenta
MagCMYK :: CMYK

-- | Yellow
YelCMYK :: CMYK

-- | Key (Black)
KeyCMYK :: CMYK

-- | Cyan, Magenta, Yellow and Black color space with Alpha channel.
data CMYKA

-- | Cyan
CyanCMYKA :: CMYKA

-- | Magenta
MagCMYKA :: CMYKA

-- | Yellow
YelCMYKA :: CMYKA

-- | Key (Black)
KeyCMYKA :: CMYKA

-- | Alpha
AlphaCMYKA :: CMYKA

-- | A Pixel family with a color space and a precision of elements.
instance GHC.Enum.Bounded Graphics.ColorSpace.CMYK.CMYKA
instance GHC.Show.Show Graphics.ColorSpace.CMYK.CMYKA
instance GHC.Enum.Enum Graphics.ColorSpace.CMYK.CMYKA
instance GHC.Classes.Eq Graphics.ColorSpace.CMYK.CMYKA
instance GHC.Enum.Bounded Graphics.ColorSpace.CMYK.CMYK
instance GHC.Show.Show Graphics.ColorSpace.CMYK.CMYK
instance GHC.Enum.Enum Graphics.ColorSpace.CMYK.CMYK
instance GHC.Classes.Eq Graphics.ColorSpace.CMYK.CMYK
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.AlphaSpace Graphics.ColorSpace.CMYK.CMYKA e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYKA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.CMYK.CMYK e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.CMYK.CMYK e)


module Graphics.ColorSpace.RGB

-- | Red, Green and Blue color space.
data RGB
RedRGB :: RGB
GreenRGB :: RGB
BlueRGB :: RGB

-- | Red, Green and Blue color space with Alpha channel.
data RGBA
RedRGBA :: RGBA
GreenRGBA :: RGBA
BlueRGBA :: RGBA
AlphaRGBA :: RGBA

-- | A Pixel family with a color space and a precision of elements.
instance GHC.Enum.Bounded Graphics.ColorSpace.RGB.RGBA
instance GHC.Show.Show Graphics.ColorSpace.RGB.RGBA
instance GHC.Enum.Enum Graphics.ColorSpace.RGB.RGBA
instance GHC.Classes.Eq Graphics.ColorSpace.RGB.RGBA
instance GHC.Enum.Bounded Graphics.ColorSpace.RGB.RGB
instance GHC.Show.Show Graphics.ColorSpace.RGB.RGB
instance GHC.Enum.Enum Graphics.ColorSpace.RGB.RGB
instance GHC.Classes.Eq Graphics.ColorSpace.RGB.RGB
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.AlphaSpace Graphics.ColorSpace.RGB.RGBA e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGBA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.RGB.RGB e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.RGB.RGB e)


module Graphics.ColorSpace.X

-- | This is a single channel colorspace, that is designed to separate Gray
--   level values from other types of colorspace, hence it is not
--   convertible to or from, but rather is here to allow operation on
--   arbirtary single channel images. If you are looking for a true
--   grayscale colorspace <a>Y</a> should be used instead.
data X
X :: X

-- | A Pixel family with a color space and a precision of elements.

-- | Separate a Pixel into a list of components with <a>X</a> pixels
--   containing every component from the pixel.
--   
--   <pre>
--   &gt;&gt;&gt; toPixelsX (PixelRGB 4 5 6)
--   [&lt;X:(4)&gt;,&lt;X:(5)&gt;,&lt;X:(6)&gt;]
--   </pre>
toPixelsX :: ColorSpace cs e => Pixel cs e -> [Pixel X e]

-- | Combine a list of <a>X</a> pixels into a Pixel with a specified
--   channel order. Not the most efficient way to construct a pixel, but
--   might prove useful to someone.
--   
--   <pre>
--   &gt;&gt;&gt; fromPixelsX [(RedRGB, 3), (BlueRGB, 5), (GreenRGB, 4)]
--   &lt;RGB:(3.0|4.0|5.0)&gt;
--   
--   &gt;&gt;&gt; fromPixelsX $ zip (enumFrom RedRGB) (toPixelsX $ PixelRGB 4 5 6)
--   &lt;RGB:(4.0|5.0|6.0)&gt;
--   </pre>
fromPixelsX :: ColorSpace cs e => [(cs, Pixel X e)] -> Pixel cs e
instance GHC.Show.Show Graphics.ColorSpace.X.X
instance GHC.Enum.Bounded Graphics.ColorSpace.X.X
instance GHC.Enum.Enum Graphics.ColorSpace.X.X
instance GHC.Classes.Eq Graphics.ColorSpace.X.X
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.X.X e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X)
instance GHC.Base.Monad (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X e)


module Graphics.ColorSpace.Binary

-- | Under the hood, binary pixels are represented as <a>Word8</a>, but can
--   only take values of <tt>0</tt> or <tt>1</tt>. Use
--   <a>zero</a>/<a>one</a> to construct a bit and <a>on</a>/<a>off</a> to
--   construct a binary pixel.
data Bit

-- | Represents value <a>True</a> or <tt>1</tt> in binary. Often also
--   called a foreground pixel of an object.
on :: Pixel X Bit

-- | Represents value <a>False</a> or <tt>0</tt> in binary. Often also
--   called a background pixel.
off :: Pixel X Bit

-- | Test if Pixel's value is <a>on</a>.
isOn :: Pixel X Bit -> Bool

-- | Test if Pixel's value is <a>off</a>.
isOff :: Pixel X Bit -> Bool

-- | Convert a <a>Bool</a> to a binary pixel.
--   
--   <pre>
--   &gt;&gt;&gt; isOn (fromBool True)
--   True
--   </pre>
fromBool :: Bool -> Pixel X Bit
zero :: Bit
one :: Bit
bit2bool :: Bit -> Bool
bool2bit :: Bool -> Bit
toNum :: Num a => Bit -> a
fromNum :: (Eq a, Num a) => a -> Bit
instance GHC.Classes.Eq Graphics.ColorSpace.Binary.Bit
instance GHC.Classes.Ord Graphics.ColorSpace.Binary.Bit
instance GHC.Show.Show Graphics.ColorSpace.Binary.Bit
instance Data.Bits.Bits Graphics.ColorSpace.Binary.Bit
instance Data.Bits.Bits (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.X.X Graphics.ColorSpace.Binary.Bit)
instance Graphics.ColorSpace.Elevator.Elevator Graphics.ColorSpace.Binary.Bit
instance GHC.Num.Num Graphics.ColorSpace.Binary.Bit
instance Foreign.Storable.Storable Graphics.ColorSpace.Binary.Bit
instance Data.Vector.Unboxed.Base.Unbox Graphics.ColorSpace.Binary.Bit
instance Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector Graphics.ColorSpace.Binary.Bit
instance Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector Graphics.ColorSpace.Binary.Bit


module Graphics.ColorSpace.Y

-- | Luma or brightness, which is usually denoted as <tt>Y'</tt>.
data Y
LumaY :: Y

-- | Luma with Alpha channel.
data YA

-- | Luma
LumaYA :: YA

-- | Alpha channel
AlphaYA :: YA

-- | A Pixel family with a color space and a precision of elements.
instance GHC.Enum.Bounded Graphics.ColorSpace.Y.YA
instance GHC.Show.Show Graphics.ColorSpace.Y.YA
instance GHC.Enum.Enum Graphics.ColorSpace.Y.YA
instance GHC.Classes.Eq Graphics.ColorSpace.Y.YA
instance GHC.Enum.Bounded Graphics.ColorSpace.Y.Y
instance GHC.Show.Show Graphics.ColorSpace.Y.Y
instance GHC.Enum.Enum Graphics.ColorSpace.Y.Y
instance GHC.Classes.Eq Graphics.ColorSpace.Y.Y
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.AlphaSpace Graphics.ColorSpace.Y.YA e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.YA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.Y.Y e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y)
instance GHC.Base.Monad (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.Y.Y e)


module Graphics.ColorSpace.YCbCr

-- | Color space is used to encode RGB information and is used in JPEG
--   compression.
data YCbCr

-- | Luma component (commonly denoted as <b>Y'</b>)
LumaYCbCr :: YCbCr

-- | Blue difference chroma component
CBlueYCbCr :: YCbCr

-- | Red difference chroma component
CRedYCbCr :: YCbCr

-- | YCbCr color space with Alpha channel.
data YCbCrA

-- | Luma component (commonly denoted as <b>Y'</b>)
LumaYCbCrA :: YCbCrA

-- | Blue difference chroma component
CBlueYCbCrA :: YCbCrA

-- | Red difference chroma component
CRedYCbCrA :: YCbCrA

-- | Alpha component.
AlphaYCbCrA :: YCbCrA

-- | A Pixel family with a color space and a precision of elements.
instance GHC.Enum.Bounded Graphics.ColorSpace.YCbCr.YCbCrA
instance GHC.Show.Show Graphics.ColorSpace.YCbCr.YCbCrA
instance GHC.Enum.Enum Graphics.ColorSpace.YCbCr.YCbCrA
instance GHC.Classes.Eq Graphics.ColorSpace.YCbCr.YCbCrA
instance GHC.Enum.Bounded Graphics.ColorSpace.YCbCr.YCbCr
instance GHC.Show.Show Graphics.ColorSpace.YCbCr.YCbCr
instance GHC.Enum.Enum Graphics.ColorSpace.YCbCr.YCbCr
instance GHC.Classes.Eq Graphics.ColorSpace.YCbCr.YCbCr
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr e)
instance GHC.Classes.Ord e => GHC.Classes.Ord (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA e)
instance GHC.Classes.Eq e => GHC.Classes.Eq (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.AlphaSpace Graphics.ColorSpace.YCbCr.YCbCrA e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCrA e)
instance GHC.Show.Show e => GHC.Show.Show (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr e)
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.Internal.ColorSpace Graphics.ColorSpace.YCbCr.YCbCr e
instance GHC.Base.Functor (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr)
instance GHC.Base.Applicative (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr)
instance Data.Foldable.Foldable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr)
instance Foreign.Storable.Storable e => Foreign.Storable.Storable (Graphics.ColorSpace.Internal.Pixel Graphics.ColorSpace.YCbCr.YCbCr e)


module Graphics.ColorSpace

-- | A Pixel family with a color space and a precision of elements.
class (Eq cs, Enum cs, Show cs, Bounded cs, Typeable cs, Functor (Pixel cs), Applicative (Pixel cs), Foldable (Pixel cs), Eq (Pixel cs e), Unbox (Components cs e), Storable (Pixel cs e), Elevator e) => ColorSpace cs e where {
    type family Components cs e;
}

-- | Convert a Pixel to a representation suitable for storage as an unboxed
--   element, usually a tuple of channels.
toComponents :: ColorSpace cs e => Pixel cs e -> Components cs e

-- | Convert from an elemnt representation back to a Pixel.
fromComponents :: ColorSpace cs e => Components cs e -> Pixel cs e

-- | Construt a Pixel by replicating the same value across all of the
--   components.

-- | <i>Deprecated: Use <a>pure</a> from <a>Applicative</a> instead</i>
promote :: ColorSpace cs e => e -> Pixel cs e

-- | Retrieve Pixel's component value
getPxC :: ColorSpace cs e => Pixel cs e -> cs -> e

-- | Set Pixel's component value
setPxC :: ColorSpace cs e => Pixel cs e -> cs -> e -> Pixel cs e

-- | Map a channel aware function over all Pixel's components.
mapPxC :: ColorSpace cs e => (cs -> e -> e) -> Pixel cs e -> Pixel cs e

-- | Left fold on two pixels a the same time. If accumulator is nutrual to
--   the folding funciton then it's equivalent to <tt>foldlPx2 f acc px1
--   px2 == foldl' acc (liftA2 (f acc) px1 px2)</tt>
foldlPx2 :: ColorSpace cs e => (b -> e -> e -> b) -> b -> Pixel cs e -> Pixel cs e -> b

-- | Map a function over all Pixel's componenets.

-- | <i>Deprecated: Use <a>fmap</a> from <a>Functor</a> instead</i>
liftPx :: ColorSpace cs e => (e -> e) -> Pixel cs e -> Pixel cs e

-- | Zip two Pixels with a function.

-- | <i>Deprecated: Use <a>liftA2</a> from <a>Applicative</a> instead</i>
liftPx2 :: ColorSpace cs e => (e -> e -> e) -> Pixel cs e -> Pixel cs e -> Pixel cs e

-- | Right fold over all Pixel's components.

-- | <i>Deprecated: Use <a>foldr'</a> from <a>Foldable</a> instead</i>
foldrPx :: ColorSpace cs e => (e -> b -> b) -> b -> Pixel cs e -> b

-- | Left strict fold over all Pixel's components.

-- | <i>Deprecated: Use <a>foldl'</a> from <a>Foldable</a> instead</i>
foldlPx :: ColorSpace cs e => (b -> e -> b) -> b -> Pixel cs e -> b

-- | <i>Deprecated: Use <a>foldl1</a> from <a>Foldable</a> instead</i>
foldl1Px :: ColorSpace cs e => (e -> e -> e) -> Pixel cs e -> e

-- | A color space that supports transparency.
class (ColorSpace (Opaque cs) e, ColorSpace cs e) => AlphaSpace cs e where {
    type family Opaque cs;
}

-- | Get an alpha channel of a transparant pixel.
getAlpha :: AlphaSpace cs e => Pixel cs e -> e

-- | Add an alpha channel to an opaque pixel.
--   
--   <pre>
--   addAlpha 0 (PixelHSI 1 2 3) == PixelHSIA 1 2 3 0
--   </pre>
addAlpha :: AlphaSpace cs e => e -> Pixel (Opaque cs) e -> Pixel cs e

-- | Convert a transparent pixel to an opaque one by dropping the alpha
--   channel.
--   
--   <pre>
--   dropAlpha (PixelRGBA 1 2 3 4) == PixelRGB 1 2 3
--   </pre>
dropAlpha :: AlphaSpace cs e => Pixel cs e -> Pixel (Opaque cs) e

-- | Convert a pixel to Luma pixel.
toPixelY :: ToY cs e => Pixel cs e -> Pixel Y Double

-- | Convert a pixel to Luma pixel with Alpha.
toPixelYA :: ToYA cs e => Pixel cs e -> Pixel YA Double

-- | Convert to an <a>RGB</a> pixel.
toPixelRGB :: ToRGB cs e => Pixel cs e -> Pixel RGB Double

-- | Convert to an <a>RGBA</a> pixel.
toPixelRGBA :: ToRGBA cs e => Pixel cs e -> Pixel RGBA Double

-- | Convert to an <a>HSI</a> pixel.
toPixelHSI :: ToHSI cs e => Pixel cs e -> Pixel HSI Double

-- | Convert to an <a>HSIA</a> pixel.
toPixelHSIA :: ToHSIA cs e => Pixel cs e -> Pixel HSIA Double

-- | Convert to a <a>CMYK</a> pixel.
toPixelCMYK :: ToCMYK cs e => Pixel cs e -> Pixel CMYK Double

-- | Convert to a <a>CMYKA</a> pixel.
toPixelCMYKA :: ToCMYKA cs e => Pixel cs e -> Pixel CMYKA Double

-- | Convert to an <a>YCbCr</a> pixel.
toPixelYCbCr :: ToYCbCr cs e => Pixel cs e -> Pixel YCbCr Double

-- | Convert to an <a>YCbCrA</a> pixel.
toPixelYCbCrA :: ToYCbCrA cs e => Pixel cs e -> Pixel YCbCrA Double

-- | Convert to a <tt>Binary</tt> pixel.
toPixelBinary :: ColorSpace cs e => Pixel cs e -> Pixel X Bit

-- | Convert a Binary pixel to Luma pixel
fromPixelBinary :: Pixel X Bit -> Pixel Y Word8

-- | Separate a Pixel into a list of components with <a>X</a> pixels
--   containing every component from the pixel.
--   
--   <pre>
--   &gt;&gt;&gt; toPixelsX (PixelRGB 4 5 6)
--   [&lt;X:(4)&gt;,&lt;X:(5)&gt;,&lt;X:(6)&gt;]
--   </pre>
toPixelsX :: ColorSpace cs e => Pixel cs e -> [Pixel X e]

-- | Combine a list of <a>X</a> pixels into a Pixel with a specified
--   channel order. Not the most efficient way to construct a pixel, but
--   might prove useful to someone.
--   
--   <pre>
--   &gt;&gt;&gt; fromPixelsX [(RedRGB, 3), (BlueRGB, 5), (GreenRGB, 4)]
--   &lt;RGB:(3.0|4.0|5.0)&gt;
--   
--   &gt;&gt;&gt; fromPixelsX $ zip (enumFrom RedRGB) (toPixelsX $ PixelRGB 4 5 6)
--   &lt;RGB:(4.0|5.0|6.0)&gt;
--   </pre>
fromPixelsX :: ColorSpace cs e => [(cs, Pixel X e)] -> Pixel cs e

-- | Check weather two Pixels are equal within a tolerance. Useful for
--   comparing pixels with <a>Float</a> or <a>Double</a> precision.
eqTolPx :: (ColorSpace cs e, Ord e) => e -> Pixel cs e -> Pixel cs e -> Bool

-- | Luma or brightness, which is usually denoted as <tt>Y'</tt>.
data Y
LumaY :: Y

-- | Luma with Alpha channel.
data YA

-- | Luma
LumaYA :: YA

-- | Alpha channel
AlphaYA :: YA

-- | Conversion to Luma color space.
class ColorSpace cs e => ToY cs e

-- | Conversion to Luma from another color space.
class ToY cs e => ToYA cs e

-- | Red, Green and Blue color space.
data RGB
RedRGB :: RGB
GreenRGB :: RGB
BlueRGB :: RGB

-- | Red, Green and Blue color space with Alpha channel.
data RGBA
RedRGBA :: RGBA
GreenRGBA :: RGBA
BlueRGBA :: RGBA
AlphaRGBA :: RGBA

-- | Conversion to <a>RGB</a> color space.
class ColorSpace cs e => ToRGB cs e

-- | Conversion to <a>RGBA</a> from another color space with Alpha channel.
class ToRGB cs e => ToRGBA cs e

-- | Hue, Saturation and Intensity color space.
data HSI

-- | Hue
HueHSI :: HSI

-- | Saturation
SatHSI :: HSI

-- | Intensity
IntHSI :: HSI

-- | Hue, Saturation and Intensity color space with Alpha channel.
data HSIA

-- | Hue
HueHSIA :: HSIA

-- | Saturation
SatHSIA :: HSIA

-- | Intensity
IntHSIA :: HSIA

-- | Alpha
AlphaHSIA :: HSIA

-- | Conversion to <a>HSI</a> color space.
class ColorSpace cs e => ToHSI cs e

-- | Conversion to <a>HSIA</a> from another color space with Alpha channel.
class ToHSI cs e => ToHSIA cs e

-- | Cyan, Magenta, Yellow and Black color space.
data CMYK

-- | Cyan
CyanCMYK :: CMYK

-- | Magenta
MagCMYK :: CMYK

-- | Yellow
YelCMYK :: CMYK

-- | Key (Black)
KeyCMYK :: CMYK

-- | Cyan, Magenta, Yellow and Black color space with Alpha channel.
data CMYKA

-- | Cyan
CyanCMYKA :: CMYKA

-- | Magenta
MagCMYKA :: CMYKA

-- | Yellow
YelCMYKA :: CMYKA

-- | Key (Black)
KeyCMYKA :: CMYKA

-- | Alpha
AlphaCMYKA :: CMYKA

-- | Conversion to <a>CMYK</a> color space.
class ColorSpace cs e => ToCMYK cs e

-- | Conversion to <a>CMYKA</a>.
class ToCMYK cs e => ToCMYKA cs e

-- | Color space is used to encode RGB information and is used in JPEG
--   compression.
data YCbCr

-- | Luma component (commonly denoted as <b>Y'</b>)
LumaYCbCr :: YCbCr

-- | Blue difference chroma component
CBlueYCbCr :: YCbCr

-- | Red difference chroma component
CRedYCbCr :: YCbCr

-- | YCbCr color space with Alpha channel.
data YCbCrA

-- | Luma component (commonly denoted as <b>Y'</b>)
LumaYCbCrA :: YCbCrA

-- | Blue difference chroma component
CBlueYCbCrA :: YCbCrA

-- | Red difference chroma component
CRedYCbCrA :: YCbCrA

-- | Alpha component.
AlphaYCbCrA :: YCbCrA

-- | Conversion to <a>YCbCr</a> color space.
class ColorSpace cs e => ToYCbCr cs e

-- | Conversion to <a>YCbCrA</a> from another color space with Alpha
--   channel.
class ToYCbCr cs e => ToYCbCrA cs e

-- | This is a single channel colorspace, that is designed to separate Gray
--   level values from other types of colorspace, hence it is not
--   convertible to or from, but rather is here to allow operation on
--   arbirtary single channel images. If you are looking for a true
--   grayscale colorspace <a>Y</a> should be used instead.
data X
X :: X

-- | A class with a set of convenient functions that allow for changing
--   precision of channels within pixels, while scaling the values to keep
--   them in an appropriate range.
--   
--   <pre>
--   &gt;&gt;&gt; let rgb = PixelRGB 0.0 0.5 1.0 :: Pixel RGB Double
--   
--   &gt;&gt;&gt; eToWord8 &lt;$&gt; rgb
--   &lt;RGB:(0|128|255)&gt;
--   
--   &gt;&gt;&gt; eToWord16 &lt;$&gt; rgb
--   &lt;RGB:(0|32768|65535)&gt;
--   </pre>
class (Eq e, Num e, Typeable e, Unbox e, Storable e) => Elevator e

-- | Values are scaled to <tt>[0, 255]</tt> range.
eToWord8 :: Elevator e => e -> Word8

-- | Values are scaled to <tt>[0, 65535]</tt> range.
eToWord16 :: Elevator e => e -> Word16

-- | Values are scaled to <tt>[0, 4294967295]</tt> range.
eToWord32 :: Elevator e => e -> Word32

-- | Values are scaled to <tt>[0, 18446744073709551615]</tt> range.
eToWord64 :: Elevator e => e -> Word64

-- | Values are scaled to <tt>[0.0, 1.0]</tt> range.
eToFloat :: Elevator e => e -> Float

-- | Values are scaled to <tt>[0.0, 1.0]</tt> range.
eToDouble :: Elevator e => e -> Double

-- | Values are scaled from <tt>[0.0, 1.0]</tt> range.
eFromDouble :: Elevator e => Double -> e

-- | Change pixel precision to <a>Word8</a>.
toWord8 :: (Functor (Pixel cs), Elevator e) => Pixel cs e -> Pixel cs Word8

-- | Change pixel precision to <a>Word16</a>.
toWord16 :: (Functor (Pixel cs), Elevator e) => Pixel cs e -> Pixel cs Word16

-- | Change pixel precision to <a>Word32</a>.
toWord32 :: (Functor (Pixel cs), Elevator e) => Pixel cs e -> Pixel cs Word32

-- | Change pixel precision to <a>Word64</a>.
toWord64 :: (Functor (Pixel cs), Elevator e) => Pixel cs e -> Pixel cs Word64

-- | Change pixel precision to <a>Float</a>.
toFloat :: (Functor (Pixel cs), Elevator e) => Pixel cs e -> Pixel cs Float

-- | Change pixel precision to <a>Double</a>.
toDouble :: (Functor (Pixel cs), Elevator e) => Pixel cs e -> Pixel cs Double

-- | Change pixel precision from <a>Double</a>.
fromDouble :: (Functor (Pixel cs), Elevator e) => Pixel cs Double -> Pixel cs e

-- | 8-bit unsigned integer type
data Word8

-- | 16-bit unsigned integer type
data Word16

-- | 32-bit unsigned integer type
data Word32

-- | 64-bit unsigned integer type
data Word64
instance Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.Y.Y e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.RGB.RGB e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.HSI.HSI e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.CMYK.CMYK e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.YCbCr.YCbCr e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCrA Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYCbCr Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.Y.Y e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.RGB.RGB e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.HSI.HSI e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.CMYK.CMYK e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.YCbCr.YCbCr e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYKA Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToCMYK Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.ToHSI Graphics.ColorSpace.Y.Y e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.ToHSI Graphics.ColorSpace.RGB.RGB e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.ToHSI Graphics.ColorSpace.HSI.HSI e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.ToHSI Graphics.ColorSpace.CMYK.CMYK e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToHSI Graphics.ColorSpace.YCbCr.YCbCr e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSIA Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToHSI Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.X.X Graphics.ColorSpace.Binary.Bit
instance Graphics.ColorSpace.ToRGB Graphics.ColorSpace.Y.Y e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.ToRGB Graphics.ColorSpace.RGB.RGB e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.ToRGB Graphics.ColorSpace.HSI.HSI e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.ToRGB Graphics.ColorSpace.CMYK.CMYK e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToRGB Graphics.ColorSpace.YCbCr.YCbCr e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGBA Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToRGB Graphics.ColorSpace.X.X Graphics.ColorSpace.Binary.Bit
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToRGB Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToYA Graphics.ColorSpace.X.X Graphics.ColorSpace.Binary.Bit
instance Graphics.ColorSpace.ToY Graphics.ColorSpace.Y.Y e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.ToY Graphics.ColorSpace.RGB.RGB e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.ToY Graphics.ColorSpace.HSI.HSI e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.HSI.HSI e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.ToY Graphics.ColorSpace.CMYK.CMYK e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.CMYK.CMYK e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.CMYK.CMYKA e
instance Graphics.ColorSpace.ToY Graphics.ColorSpace.YCbCr.YCbCr e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToYA Graphics.ColorSpace.YCbCr.YCbCrA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.X.X e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.Y.Y e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.Y.YA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.RGB.RGB e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.RGB.RGBA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.HSI.HSIA e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.YCbCr.YCbCr e
instance Graphics.ColorSpace.Elevator.Elevator e => Graphics.ColorSpace.ToY Graphics.ColorSpace.YCbCr.YCbCrA e


module Data.Massiv.Array.IO

-- | Read an array from one of the supported file formats.
readArray :: Readable f arr => f -> ReadOptions f -> FilePath -> IO arr

-- | Try to guess an image format from file's extension, then attempt to
--   decode it as such. In order to supply the format manually and thus
--   avoid this guessing technique, use <a>readArray</a> instead. Color
--   space and precision of the result array must match exactly that of the
--   actual image, in order to apply auto conversion use
--   <a>readImageAuto</a> instead.
--   
--   Might throw <a>ConvertError</a>, <a>DecodeError</a> and other standard
--   errors related to file IO.
--   
--   Result image will be read as specified by the type signature:
--   
--   <pre>
--   &gt;&gt;&gt; frog &lt;- readImage "files/frog.jpg" :: IO (Image S YCbCr Word8)
--   
--   &gt;&gt;&gt; displayImage frog
--   </pre>
--   
--   In case when the result image type does not match the color space or
--   precision of the actual image file, <a>ConvertError</a> will be
--   thrown.
--   
--   <pre>
--   &gt;&gt;&gt; frog &lt;- readImage "files/frog.jpg" :: IO (Image S CMYK Word8)
--   
--   &gt;&gt;&gt; displayImage frog
--   *** Exception: ConvertError "Cannot decode JPG image &lt;Image S YCbCr Word8&gt; as &lt;Image S CMYK Word8&gt;"
--   </pre>
--   
--   Whenever image is not in the color space or precision that we need,
--   either use <a>readImageAuto</a> or manually convert to the desired one
--   by using the appropriate conversion functions:
--   
--   <pre>
--   &gt;&gt;&gt; frogCMYK &lt;- readImageAuto "files/frog.jpg" :: IO (Image S CMYK Double)
--   
--   &gt;&gt;&gt; displayImage frogCMYK
--   </pre>
readImage :: (Source S Ix2 (Pixel cs e), ColorSpace cs e) => FilePath -> IO (Image S cs e)

-- | Same as <a>readImage</a>, but will perform any possible color space
--   and precision conversions in order to match the result image type.
--   Very useful whenever image format isn't known at compile time.
readImageAuto :: (Mutable r Ix2 (Pixel cs e), ColorSpace cs e) => FilePath -> IO (Image r cs e)
writeArray :: Writable f arr => f -> WriteOptions f -> FilePath -> arr -> IO ()

-- | This function will guess an output file format from the file extension
--   and will write to file any image with the colorspace that is supported
--   by that format. Precision of the image might be adjusted using
--   <a>Elevator</a> if precision of the source array is not supported by
--   the image file format. For instance an <tt>(<a>Image</a> r <a>RGBA</a>
--   <a>Double</a>)</tt> being saved as <a>PNG</a> file would be written as
--   <tt>(<a>Image</a> r <a>RGBA</a> <a>Word16</a>)</tt>, thus using
--   highest supported precision <a>Word16</a> for that format. If
--   automatic colors space is also desired, <a>writeImageAuto</a> can be
--   used instead.
--   
--   Can throw <a>ConvertError</a>, <a>EncodeError</a> and other usual IO
--   errors.
writeImage :: (Source r Ix2 (Pixel cs e), ColorSpace cs e) => FilePath -> Image r cs e -> IO ()

-- | Write an image to file while performing all necessary precisiona and
--   color space conversions.
writeImageAuto :: (Source r Ix2 (Pixel cs e), ColorSpace cs e, ToYA cs e, ToRGBA cs e, ToYCbCr cs e, ToCMYK cs e) => FilePath -> Image r cs e -> IO ()

-- | External viewing application to use for displaying images.
data ExternalViewer

-- | Any custom viewer, which can be specified:
--   
--   <ul>
--   <li><tt>FilePath</tt> - to the actual viewer executable.</li>
--   <li><tt>[String]</tt> - command line arguments that will be passed to
--   the executable.</li>
--   <li><tt>Int</tt> - position index in the above list where
--   <a>FilePath</a> to an image should be injected</li>
--   </ul>
ExternalViewer :: FilePath -> [String] -> Int -> ExternalViewer

-- | Makes a call to an external viewer that is set as a default image
--   viewer by the OS. This is a non-blocking function call, so it might
--   take some time before an image will appear.
displayImage :: Writable (Auto TIF) (Image r cs e) => Image r cs e -> IO ()

-- | An image is written as a <tt>.tiff</tt> file into an operating
--   system's temporary directory and passed as an argument to the external
--   viewer program.
displayImageUsing :: Writable (Auto TIF) (Image r cs e) => ExternalViewer -> Bool -> Image r cs e -> IO ()

-- | Displays an image file by calling an external image viewer.
displayImageFile :: ExternalViewer -> FilePath -> IO ()

-- | Default viewer is inferred from the operating system.
defaultViewer :: ExternalViewer

-- | <pre>
--   eog /tmp/hip/img.tiff
--   </pre>
--   
--   <a>Eye of GNOME</a>
eogViewer :: ExternalViewer

-- | <pre>
--   gpicview /tmp/hip/img.tiff
--   </pre>
--   
--   <a>GPicView</a>
gpicviewViewer :: ExternalViewer

-- | <pre>
--   feh --fullscreen --auto-zoom /tmp/hip/img.tiff
--   </pre>
--   
--   <a>FEH</a>
fehViewer :: ExternalViewer

-- | <pre>
--   gimp /tmp/hip/img.tiff
--   </pre>
--   
--   <a>GIMP</a>
gimpViewer :: ExternalViewer

-- | Arrays that can be written into a file.
class Writable f arr

-- | Encode an array into a <a>ByteString</a>.
encode :: Writable f arr => f -> WriteOptions f -> arr -> ByteString

-- | File formats that can be read into an Array.
class Readable f arr

-- | Decode a <a>ByteString</a> into an Array.
decode :: Readable f arr => f -> ReadOptions f -> ByteString -> arr

-- | File format. Helps in guessing file format from a file extension, as
--   well as supplying format specific options during saving the file.
class (Default (ReadOptions f), Default (WriteOptions f), Show f) => FileFormat f where {
    type family ReadOptions f;
    type family WriteOptions f;
    type ReadOptions f = ();
    type WriteOptions f = ();
}

-- | Default file extension for this file format.
ext :: FileFormat f => f -> String

-- | Other known file extensions for this file format, eg. ".jpeg", ".jpg".
exts :: FileFormat f => f -> [String]

-- | Checks if a file extension corresponds to the format, eg. <tt>isFormat
--   ".png" PNG == True</tt>
isFormat :: FileFormat f => String -> f -> Bool
newtype Auto f
Auto :: f -> Auto f

-- | Special wrapper for formats that support encoding/decoding sequence of
--   array.
newtype Sequence f
Sequence :: f -> Sequence f

-- | This exception can be thrown while writing/encoding into a file and
--   indicates an error in an array that is being encoded.
newtype EncodeError
EncodeError :: String -> EncodeError

-- | This exception can be thrown while reading/decoding a file and
--   indicates an error in the file itself.
newtype DecodeError
DecodeError :: String -> DecodeError

-- | Conversion error, which is thrown when there is a mismatch between the
--   expected array type and the one supported by the file format. It is
--   also thrown upon a failure of automatic conversion between those
--   types, in case such conversion is utilized.
newtype ConvertError
ConvertError :: String -> ConvertError
type Image r cs e = Array r Ix2 (Pixel cs e)

-- | Generate default read options for a file format
defaultReadOptions :: FileFormat f => f -> ReadOptions f

-- | Generate default write options for a file format
defaultWriteOptions :: FileFormat f => f -> WriteOptions f
data Encode out

-- | Encode an image into a lazy <a>ByteString</a>, while selecting the
--   appropriate format from the file extension.
encodeImage :: (Source r Ix2 (Pixel cs e), ColorSpace cs e) => [Encode (Image r cs e)] -> FilePath -> Image r cs e -> ByteString

-- | List of image formats that can be encoded without any color space
--   conversion.
imageWriteFormats :: (Source r Ix2 (Pixel cs e), ColorSpace cs e) => [Encode (Image r cs e)]

-- | List of image formats that can be encoded with any necessary color
--   space conversions.
imageWriteAutoFormats :: (Source r Ix2 (Pixel cs e), ColorSpace cs e, ToYA cs e, ToRGBA cs e, ToYCbCr cs e, ToCMYK cs e) => [Encode (Image r cs e)]
data Decode out

-- | Decode an image from the strict <tt>ByteString</tt> while inferring
--   format the image is encoded in from the file extension
decodeImage :: (Source r Ix2 (Pixel cs e), ColorSpace cs e) => [Decode (Image r cs e)] -> FilePath -> ByteString -> Image r cs e

-- | List of image formats decodable with no colorspace conversion
imageReadFormats :: (Source S Ix2 (Pixel cs e), ColorSpace cs e) => [Decode (Image S cs e)]

-- | List of image formats decodable with no colorspace conversion
imageReadAutoFormats :: (Mutable r Ix2 (Pixel cs e), ColorSpace cs e) => [Decode (Image r cs e)]

-- | Bitmap image with <tt>.bmp</tt> extension.
data BMP
BMP :: BMP

-- | Graphics Interchange Format image with <tt>.gif</tt> extension.
data GIF
GIF :: GIF
data WriteOptionsGIF
woGetPaletteOptionsGIF :: WriteOptionsGIF -> PaletteOptions
woSetPaletteOptionsGIF :: PaletteOptions -> WriteOptionsGIF -> WriteOptionsGIF

-- | To specify how the palette will be created.
data PaletteOptions
PaletteOptions :: PaletteCreationMethod -> Bool -> Int -> PaletteOptions

-- | Algorithm used to find the palette
[paletteCreationMethod] :: PaletteOptions -> PaletteCreationMethod

-- | Do we want to apply the dithering to the image. Enabling it often
--   reduce compression ratio but enhance the perceived quality of the
--   final image.
[enableImageDithering] :: PaletteOptions -> Bool

-- | Maximum number of color we want in the palette
[paletteColorCount] :: PaletteOptions -> Int

-- | Define which palette creation method is used.
data PaletteCreationMethod

-- | MedianMeanCut method, provide the best results (visualy) at the cost
--   of increased calculations.
MedianMeanCut :: PaletteCreationMethod

-- | Very fast algorithm (one pass), doesn't provide good looking results.
Uniform :: PaletteCreationMethod
data WriteOptionsSequenceGIF
woGetGifLoopingGIFs :: WriteOptionsSequenceGIF -> GifLooping
woGetPaletteOptionsGIFs :: WriteOptionsSequenceGIF -> PaletteOptions
woSetGifLoopingGIFs :: GifLooping -> WriteOptionsSequenceGIF -> WriteOptionsSequenceGIF
woSetPaletteOptionsGIFs :: PaletteOptions -> WriteOptionsSequenceGIF -> WriteOptionsSequenceGIF

-- | Delay to wait before showing the next Gif image. The delay is
--   expressed in 100th of seconds.
type GifDelay = Int

-- | Help to control the behaviour of GIF animation looping.
data GifLooping

-- | The animation will stop once the end is reached
LoopingNever :: GifLooping

-- | The animation will restart once the end is reached
LoopingForever :: GifLooping

-- | The animation will repeat n times before stoping
LoopingRepeat :: Word16 -> GifLooping

-- | High-dynamic-range image with <tt>.hdr</tt> or <tt>.pic</tt>
--   extension.
data HDR
HDR :: HDR

-- | Joint Photographic Experts Group image with <tt>.jpg</tt> or
--   <tt>.jpeg</tt> extension.
data JPG
JPG :: JPG
data WriteOptionsJPG
woGetQualityJPG :: WriteOptionsJPG -> Word8

-- | Set the image quality, supplied value will be clamped to <tt>[0,
--   100]</tt> range. This setting directly affects the Jpeg compression
--   level.
woSetQualityJPG :: Word8 -> WriteOptionsJPG -> WriteOptionsJPG

-- | Portable Network Graphics image with <tt>.png</tt> extension.
data PNG
PNG :: PNG

-- | Truevision Graphics Adapter image with .tga extension.
data TGA
TGA :: TGA

-- | Tagged Image File Format image with <tt>.tif</tt> or <tt>.tiff</tt>
--   extension.
data TIF
TIF :: TIF
toAnyCS :: forall r' cs' e' r cs e. (Source r' Ix2 (Pixel cs' e'), Mutable r Ix2 (Pixel cs e), Storable (Pixel cs e), ColorSpace cs e, ToYA cs' e', ToRGBA cs' e', ToHSIA cs' e', ToCMYKA cs' e', ToYCbCrA cs' e') => Image r' cs' e' -> Maybe (Image r cs e)
toJPImageY8 :: Source r Ix2 (Pixel Y Word8) => Image r Y Word8 -> Image Pixel8
toJPImageYA8 :: Source r Ix2 (Pixel YA Word8) => Image r YA Word8 -> Image PixelYA8
toJPImageY16 :: Source r Ix2 (Pixel Y Word16) => Image r Y Word16 -> Image Pixel16
toJPImageYA16 :: Source r Ix2 (Pixel YA Word16) => Image r YA Word16 -> Image PixelYA16
toJPImageYF :: Source r Ix2 (Pixel Y Float) => Image r Y Float -> Image PixelF
toJPImageRGB8 :: Source r Ix2 (Pixel RGB Word8) => Image r RGB Word8 -> Image PixelRGB8
toJPImageRGBA8 :: Source r Ix2 (Pixel RGBA Word8) => Image r RGBA Word8 -> Image PixelRGBA8
toJPImageRGB16 :: Source r Ix2 (Pixel RGB Word16) => Image r RGB Word16 -> Image PixelRGB16
toJPImageRGBA16 :: Source r Ix2 (Pixel RGBA Word16) => Image r RGBA Word16 -> Image PixelRGBA16
toJPImageRGBF :: Source r Ix2 (Pixel RGB Float) => Image r RGB Float -> Image PixelRGBF
toJPImageYCbCr8 :: Source r Ix2 (Pixel YCbCr Word8) => Image r YCbCr Word8 -> Image PixelYCbCr8
toJPImageCMYK8 :: Source r Ix2 (Pixel CMYK Word8) => Image r CMYK Word8 -> Image PixelCMYK8
fromDynamicImage :: forall cs e. (ColorSpace cs e, Source S Ix2 (Pixel cs e)) => DynamicImage -> Maybe (Image S cs e)
fromAnyDynamicImage :: (Mutable r Ix2 (Pixel cs e), ColorSpace cs e) => DynamicImage -> Maybe (Image r cs e)

-- | Netpbm: portable bitmap image with <tt>.pbm</tt> extension.
data PBM
PBM :: PBM

-- | Netpbm: portable graymap image with <tt>.pgm</tt> extension.
data PGM
PGM :: PGM

-- | Netpbm: portable pixmap image with <tt>.ppm</tt> extension.
data PPM
PPM :: PPM
instance GHC.Show.Show Data.Massiv.Array.IO.ExternalViewer
