úÎ@=è(      !"#$%&')This is a special version of the regular ( function. : It works by directly calling the low-level internal GHC ( primitives, and thus is as fast as you'd expect for such  a trivial operation. (The standard ($ function does something crazy like  converting a Double to a numerator/ denominator Integer > pair and then computing the integer part of the quotient as  an Integer, then truncating that to a Word8 . Which, # obviously, is ludicrously slow.) 6Hopefully one day the need for this low-level hackery  will disappear. The Colour5 type. Stores a red, a green and a blue component as  strict, unboxed Word8* values. (So it should be quite efficient @ in time and space.) Also provides various class instances for  arithmetic, etc. >Note that 0x00 is assumed to mean zero, and 0xFF to mean one.  That means that (*)* is slightly slower than you might expect 7 due to the extra steps required for renormalisation; (+) and  (-) are still efficient, however. 'Apply a function to every channel of a Colour8. (Mostly used 8 internally; exposed here in case it might be useful.) The colour equivilent of Data.List.zipWith. (Mostly used 8 internally; exposed here in case it might be useful.) -Use a function to fold the three values in a Colour8 into B a single value. No particular order of application is promised.  Convert a Word8 into a shade of grey. Scale a Colour8+ by the specified amount. Recall that 0x00 C means zero, and 0xFF means one. This means that it is impossible  to make a colour brighter", only darker. It also means this ? operation is modestly inefficient due to the renormalisation  steps. Constant: Black. Constant: Red. Constant: Yellow. Constant: Green. Constant: Cyan. Constant: Blue. Constant: Magenta. Constant: White.    The Colour5 type. Stores a red, a green and a blue component as  strict, unboxed Double* values. (So it should be quite efficient @ in time and space.) Also provides various class instances for B arithmetic, etc. It is generally assumed that each channel will 7 have a value somewhere between 0 and 1 at all times.  Note that (*)4 acts channel-wise. This is usually what is wanted. <Apply a function to every channel in a colour. (Mostly used : internally, but exposed here in case it may be useful.) This is similar to Data.List.zipWith. (Mostly used internally, . but exposed here in case it may be useful.) Use a function to collapse a Colour into a Double. No / particular order of application is promised. Turn a Double into a shade of grey. Scale a Colour- by a specified amount. (That is, change the - brightness while not affecting the shade.) Take a Colour) and clip all channels to the range 0--1 ; inclusive. Any value outside that range will be replaced ; with the nearest endpoint (i.e., 0 for negative numbers, 7 1 for positive numbers higher than 1). Values inside  the range are unaffected. Constant: Black. Constant: Red. Constant: Yellow. !Constant: Green. "Constant: Cyan. #Constant: Blue. $Constant: Magenta. %Constant: White.  !"#$% !"#$% !"#$%& Convert a  into a . Recall that 9 0x00 means zero and 0xFF means one; this function will # remap such values appropriately. ' Convert a  into a . Any values outside  the range 0--1 will be wrapped to that range. You may  want to run ! before calling this function to 8 prevent this behaviour (unless you know the values can't 8 be outside the permitted range). This function is the  exact inverse of &; 0 is mapped to 0x00 and  1 is mapped to 0xFF. !  !"#$%&'!% !"#$  &'&')      !"#$%&'()*+,-.AC-Colour-1.1.2Data.Colour.FastFloorData.Colour.Word8Data.Colour.Double Data.Colour fast_floorColour8red8green8blue8c8mapc8zipc8foldgrey8c8scalec8Blackc8Redc8Yellowc8Greenc8Cyanc8Blue c8Magentac8WhiteColourredgreenbluecmapczipcfoldgreycscaleclipcBlackcRedcYellowcGreencCyancBluecMagentacWhitecpromotecdemotebaseGHC.Realfloor