úÎ-**J*      !"#$%&'() Safe-Infered Invariant:    For all i in 0 ..   - 1,   ( i) == i This implies that    For all a of the form  i (with i in 0 ..   - 1),   ( a) = a The behaviour of fromInt' for out-of-bounds indices and that of toInt; for elements not occuring in the numbering is undefined. $Thus, assuming the invariant holds, toInt is uniquely determined by fromInt (on valid inputs). "Unsafe" because the invariant isn' t checked.  enumNu a b% creates a numbering of the elements [a .. b] (inclusively). enumNu' i j% creates a numbering of the elements [toEnum i .. toEnum j] (inclusively). Creates a numbering for an *4-like type, given numberings for the summand types. UCreates a numbering for an pair-like type, given numberings for the component types. = . = . Won'3t actually be distinct if the invariant is broken. = . Won'3t actually be distinct if the invariant is broken. (Uses a + because Data.Set doesn'(t expose the necessary index-based API) KThe distinctness precondition is checked (we have to create a map anyway). +Allows customization of the map type used. See . See . @Uniquifies the input first (resulting in an unspecified order). @Uniquifies the input first (resulting in an unspecified order). @Uniquifies the input first (resulting in an unspecified order). ,Numbering of all elements of a finite type. !Identity numbering #In  mapNu f g nu, the arguments must satisfy   For all i in 0 ..   nu - 1,  (g . f) a == a  where  a =  nu i $In reindexNu k f g nu, the arguments must satisfy    For all i in 0 .. k,  (g . f) i == i 4Note: Decreasing the length with this function will not release any memory retained T by the closures in the input numbering (e.g. the vector, for numberings created by ). Use ' afterwards for that. ' Semantic ,u (for in-bounds inputs), but backs the numbering with a new vector and map having just the required length (example: consolidateNu (& 1 ( largeVector))). (Like ', but uses unboxed vectors. )Identity for nonpositive arg. -"Assumes that the invariant holds. - . equivalent / equivalent 0 equivalent 1 equivalent 2 equivalent (,) equivalent 3 equivalent 4 equivalent 5 equivalent  !The   "#$New   Old index to new index New index to old index %&'()6-7*  !"#$%&'()*  !"#$'(&%) %  !"#$%&'()6-78      !"#$%&'()*+,-./0+123+,4+,5+,6+78+79./:./;./<=>?numbering-0.2.1Data.Numbering!NumberingBrokenInvariantException nbie_indexnbie_fromIntOfIndexnbie_toIntOfFromIntOfIndex NumberingUnsafeMkNumberingtoIntfromIntnuLengthenumNuenumNu'sumNueitherNuprodNupairNu nuIndices nuElementsnuToListnuToDistinctList nuToVectornuToDistinctVectorcheckNu nuFromSetnuFromDistinctVectornuFromDistinctVectorGnuFromDistinctListnuFromDistinctUnboxListnuFromDistinctIntList nuFromListnuFromUnboxList nuFromIntList finiteTypeNuidNuemptyNumapNu reindexNu reverseNunuTake consolidateNuconsolidateUnboxNunuDropbase Data.EitherEithercontainers-0.4.2.1Data.MapMapGHC.Baseid $fEqNumberingLeftRighteither Data.Tuplefstsndempty insertWithKeylookup,$fExceptionNumberingBrokenInvariantException$fShowNumbering