h&'      !"#$%& 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-Inferred11  identiconConsume bytes from a strict '* and apply them to a function that takes ( until it produces a . identiconIdenticons that can be rendered as an image implement this class. identiconThe  type function calculates type that a layer-producing function should have to consume the given number of bytes n. identiconThe  type function returns the type of the code which can implement the given identicon. identiconThe  type function calculates how many bytes are consumed in a given identicon. identiconThe  type function calculates how many bytes are available for consumption in a given identicon. identicon is the basic building block of an identicon. It's a function that takes the following arguments (in order):Width of identiconHeight of identiconPosition on X axisPosition on Y axis@and returns a ) value. In this library, an identicon is generated as a @superposition@ of several Layers.  identiconThe ( )! type operator is used to attach  s to , thus adding layers to it and exhausting the bytes that are available for identicon generation. An example of identicon that can be generated from 16 byte hash is shown below: type Icon = Identicon 16 :+ Consumer 5 :+ Consumer 5 :+ Consumer 6%The identicon above has three layers.  identicon  is a type that represents an entity that consumes bytes that are available for identicon generation. It's parametrized over a phantom type n which is a natural number on the type level that represents the number of bytes that this entity consumes. At this moment, a   always adds one  to an  when attached to it. The number of bytes, specified as type parameter of  type must be completely consumed by a collection of consumers attached to it. To attach a consumer to , you use the ( ) type operator, see below. identicon is a type that represents an identicon consisting of zero layers. The type is parametrized over a phantom type n which is a natural number on the type level that represents the number of bytes that should be provided to generate this type of identicon. Bytes typically come from some sort of hash that has a fixed size.* identicon)Combine results of two rending functions.+ identicon2An implementation of saturated addition for bytes. identicon*Render an identicon. The function returns , if given '7 is too short or when width or height is lesser than 1. identiconFunction that produces a layer identiconBytes to consume identicon The rest of ' and produced  identiconA - clarifying identicon type identiconCorresponding implementation identiconWidth in pixels identiconHeight in pixels identiconBytes to consume identicon(The rest of bytes and producing function identiconType that defines an identicon identicon$Implementation that generates layers identiconWidth in pixels identiconHeight in pixels identicon1Collection of bytes to use, should be long enough identiconRendered identicon, or , if there is not enough bytes    8 8 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-Inferred identiconBlack is a special color, it means absence of light. We give this pixel a name because it's used very frequently in layer coding. identicon Layer filled with a given color. identicon%Gradient changing from left to right. identicon%Gradient changing from top to bottom. identicon>Gradient changing from top left corner to bottom right corner. identicon>Gradient changing from top right corner to bottom left corner. identicon=Gradient with one color everywhere and another in the center.. identiconA gradient helper function. identiconA built-in gradient transforming function. It maps continuous floating value changing from 0 to 1 to value changing from 0 to 1 (in the middle) and back to 0. identicon#This sharpens gradient transitions.  identicononGrid w h n l, given grid that has w6 horizontal discrete positions (of equal length) and h* vertical positions, it makes given layer l occupy cell at index n. This approach allows you control position and size at the same time. The index n can be greater than maximal index, in this case reminder of division of n by w * h is used.! identicon,Limit given layer so that it forms a circle." identicon#Add horizontal symmetry to a layer.# identicon!Add vertical symmetry to a layer.$ identiconAdd horizontal and vertical symmetry to layer. Result is a layer with four mirrored repetitions of the same figure.% identicon Just like $, but every repetition is rotated by 90. Only works with square layers because for speed it just swaps coordinates.& identicon7Select one of the provided alternatives given a number. identiconGradient transforming function identicon Left color identicon Right color identiconGradient transforming function identicon Top color identicon Bottom color identiconGradient transforming function identiconTop left color identiconBottom right color identiconGradient transforming function identiconTop right color identiconBottom left color identiconGradient transforming function identicon @Edge@ color identiconColor in the center. identiconGradient transforming function identiconActual value of coordinate identiconMaximum value of coordinate identicon#Color at the beginning of the range identiconColor at the end of the range identiconResulting color  identiconNumber of horizontal positions identiconNumber of vertical positions identiconIndex of this cell identiconLayer to insert identiconResulting layer !"#$%& !"#$%&/        !"#$%&'()*+,-./01*23*4567&identicon-0.2.3-7tKi9FqRVRgAiLl2kn6AKjGraphics.IdenticonGraphics.Identicon.Primitive ApplyBytes applyBytes RenderablerenderToLayerImplementation BytesConsumedBytesAvailableLayerunLayer:+Consumer IdenticonrenderIdenticon $fMonoidLayer$fSemigroupLayer$fRenderableIdenticon$fApplyBytesFUN$fApplyBytesLayer$fRenderable:+blackcolor gradientLR gradientTB gradientTLBR gradientTRBL gradientXYmidedgeonGridcirclehsymvsymhvsymrsymoneofbytestring-0.11.3.1Data.ByteString.Internal ByteStringbaseGHC.WordWord8(JuicyPixels-3.3.8-8gpgVFL07T52ZK7J24IIi3Codec.Picture.Types PixelRGB8 mixPixelssaturatedAddition GHC.MaybeNothing Data.ProxyProxyξ