h)MKl=      !"#$%&'()*+,-./0123456789:;<0.1! Safe-Inferred(1. All 4 guarantees is a more or less uniform distribution.i Proof that 3 x l r contains a value of type x" whose type-level representation t :: 2 x satisfies a  x l r t.i0Bring to scope the type-level representation of x as t :: 2 x1, together with the constraints that prove that t is  to be in the interval 3 x l r.  Identity law x ==  x  i Proof that t is known to be within l and r in 3 x l r.NB: When defining  instances, instead of mentioning any necessary constraints in the instance context, mention them them in #. By doing so, when an instance of  x l r is satisfied,  x l r/ is satisfied as well. If you don't do this, " won't behave as you would expect.iConstraints to be satisfied by t" if it is known to be within the 3 x l r interval.i&Obtain a term-level representation of t as 3 x l r.Also consider using 8, an alternative version of this function designed to be used with -XTypeApplications.i s where division# is known to be a closed operation.i a b divides a by b. Correspondence with +  forall (a :: 3 x l r) (b :: 3 x l r). ( x l r) => + a b == > ( a b) i  s where obtaining the  successor% is knonwn to be a closed operation. i  a1 is the next discrete value in the interval, the  successor. Correspondence with   forall (a :: 3 x l r). (  x l r) =>  a == > (  a) i  s where obtaining the  predecessor% is knonwn to be a closed operation. i  a6 is the previous discrete value in the interval, the  predecessor. Correspondence with   forall (a :: 3 x l r). (  x l r) =>  a == > (  a) i s where negation# is known to be a closed operation.i-Additive inverse, if it fits in the interval.  Identity law  forall (a :: 3 x l r). (  x l r) => a ==  ( a) Correspondence with )  forall (a :: 3 x l r) (b :: 3 x l r). ( x l r) => ) a b == > ( a b) i s where  subtraction# is known to be a closed operation.i a b substracts b from a Correspondence with (  forall (a :: 3 x l r) (b :: 3 x l r). ( x l r) => ( a b == > ( a b) i s where multiplication# is known to be a closed operation.i a b multiplies a times b. Correspondence with '  forall (a :: 3 x l r) (b :: 3 x l r). ( x l r) => ' a b == > ( a b) i s where addition# is known to be a closed operation.i a b adds a and b. Correspondence with &  forall (a :: 3 x l r) (b :: 3 x l r). ( x l r) => & a b == > ( a b) i &s known to be inhabited by the number one.iOne.i &s known to be inhabited by the number zero.iZero.i s that contain discrete elements.iPredecessor. That is, the previous discrete value in the interval.?1 if the result would be out of the interval. See   too.iSuccessor. That is, the next discrete value in the interval.?1 if the result would be out of the interval. See   too.i #s that can be upcasted to a larger   type.i Proof that 3 x ld rd can be upcasted into 3 x lu ru.  Identity law  forall (a :: 3 x ld rd). ( x ld rd lu ru) => : a == : ( a :: 3 x lu ru) i s that support clamping.iWrap x in 3 x l r, making sure that x0 is within the interval ends by clamping it to " x l r if less than l , or to # x l r if more than r, if necessary. iFor 3 x l r to be a valid interval type,   x l r needs to be satisfied. All  s are non-empty.NB: When defining   instances, instead of mentioning any necessary constraints in the instance context, mention them them in !#. By doing so, when an instance of   x l r is satisfied, ! x l r. is satisfied as well. If you don't do this, " won't behave as you would expect.!i Constraints to be satisfied for 3 x l r( to be a valid non-empty interval type."iMinimum value of type x contained in the interval 3 x l r, if any. If 3 x l r6 is unbounded on the left end, then it's ok to leave " x l r3 undefined. If defined, it should mean the same as l.#iMaximum value of type x contained in the interval 3 x l r, if any. If 3 x l r7 is unbounded on the right end, then it's ok to leave # x l r3 undefined. If defined, it should mean the same as r.$i0Proof that there is at least one element in the 3 x l r interval.*No guarantees are made about the value of $ other than the fact that it is known to inhabit the interval. The only exception to this are intervals that contain a single inhabitant, in which case $ will produce it. See 7.%i Wrap the x value in the interval 3 x l r , if it fits.Consider using 9- if the interval includes all values of type x.Consider using 86 if you have type-level knowledge about the value of x.Consider using 4 if you know that the x is within the interval.  Identity law  forall (x :: @).  such that A (% x). B : (% x) == > x &i& a b adds a and b.?1 if the result would be out of the interval. See , too.'i' a b multiplies a times b.?1 if the result would be out of the interval. See , too.(i( a b substracts b from a.?1 if the result would be out of the interval. See , too.)i) a is the additive inverse of a.?2 if the result would be out of the interval. See , too.*i* a" is the multiplicative inverse of a.?, if the result would be out of the interval.+i+ a b divides a by b.?1 if the result would be out of the interval. See  too.,iMaximum right bound for x. All the values of type x are at most as , x says, as required by 9.-i The kind of r in 3 x l r..iMinimum left bound for x. All the values of type x are at least as . x says, as required by 9./i The kind of l in 3 x l r.0iType-level verison of C :: x. If x7 is unbounded on the right end, then it's ok to leave 0 x. undefined. If defined, it should match what , means.1iType-level verison of D :: x. If x6 is unbounded on the left end, then it's ok to leave 1 x. undefined. If defined, it should match what . means.2iThe kind of the type-level representation of x in 3 x l r, as it appears in  x l r t.3iA value of type x known to be within the i$nterval determined by the left end l and right end r.EiFor E x to be safe,  x l r t needs to be satisfied, with t: being the type-level representation of the value of type x.4i4 allows you to wrap an x in an 3 x l r, failing with F if the x is outside the interval.WARNING: This function calls %2, which means that you can't use it to implement %. You will have to use 5; in that case. Your code will loop indefinitely otherwise.5i5 allows you to wrap an x in an 3 x l r without checking whether the x is within the interval ends.WARNING: This function is fast because it doesn't do any work, but also it is very dangerous because it ignores all the safety supposedly given by the 3 x l r type. Don't use this unless you have proved by other means that the x is within the 3 x l r interval. Please use % instead, or even 4.6i Downcast 3 x lu ru into 3 x ld rd if wrapped x value fits in 3 x ld rd.7iIf an   contains a single $ , obtain it.8iAlternative version of , designed to be used with -XTypeApplications. It works only when x can be inferred by other means. > :type 8 8 :: forall {x :: @} (t :: 2 x) (l :: / x) (r :: - x).  x l r t => 3 x l r > :type 8 @55 ::  G l r 55 => 3 G l r 8 @55 ::  G l r 55 => 3 G l r > :type 8 @55 @33 ::  G 33 r 55 => 3 G 33 r 8 @55 @33 ::  G 33 r 55 => 3 G 33 r > :type 8 @55 @33 @77 :: 3 G 33 77 8 @55 @33 @77 :: 3 G 33 77 :: 3 G 33 77 > 8 @55 @33 @77 :: 3 G 33 77 55 9iWrap the given x in the interval 3 x (. x) (, x).This function always succeeds because the interval known to fit all the values of type x.  Identity law 9 . : == = : . 9 == = !If the interval is not as big as x:Consider using %.Consider using 8: if you have type-level knowledge about the value of x.Consider using 4 if you know that the x is within the interval.:i Obtain the x that is wrapped in the 3 x l r.  Identity law 9 . : == = : . 9 == = ;i"Minimum value in the interval, if " x is defined.<i"Maximum value in the interval, if # x is defined.Hi'? means  unbounded. ''Just ('I, t) means up to t , inclusive. ''Just ('J, t) means up to t , exclusive.Ki'? means  unbounded.'> t means up to t,  inclusive.Li'? means  unbounded. ''Just ('I, t) means up to t , inclusive. ''Just ('J, t) means up to t , exclusive.Mi'? means  unbounded.'> t means up to t , inclusive.Ni'? means  unbounded.OiIdentity. This instance is  INCOHERENT0, but that's OK because all implementations of  should give the same result, and this instance is as fast as possible. So, it doesn't matter whether this instance or another one is picked.  *)('&$+%#"!,-./0123EPQ456789:;< Safe-Inferred (1`iThis is so that GHC doesn't complain about the unused modules, which we import here so that `genmodules.sh`2 doesn't have to add it to the generated modules. Safe-Inferred (1?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a_bc_bdefg_hi_`j_kl_kmn_op_qrseftefuvwxyz{|}}}} } } } } }}}}}}}}}}}}}}}}}}}"} i-0.1-inplaceIi I.Internal I.IntegerI.Int8I.Autogen.Word64I.Autogen.Word32I.Autogen.Word16I.Autogen.WordI.Autogen.Int64I.Autogen.Int32I.Autogen.Int16 I.Autogen.IntI.Autogen.CWcharI.Autogen.CUShortI.Autogen.CULongI.Autogen.CULLongI.Autogen.CUIntPtrI.Autogen.CUIntMaxI.Autogen.CUIntI.Autogen.CUCharI.Autogen.CSizeI.Autogen.CShortI.Autogen.CSCharI.Autogen.CPtrdiffI.Autogen.CLongI.Autogen.CLLongI.Autogen.CIntPtrI.Autogen.CIntMaxI.Autogen.CIntI.Autogen.CChar I.Natural I.RationalI.Word8ShoveshoveWithwithKnownKnownCtxknown'DivdivSuccsuccPredpredNegatenegateMinusminusMultmultPlusplusOneoneZerozeroDiscretepred'succ'UpupClampclampInterval IntervalCtxMinIMaxI inhabitantfromplus'mult'minus'negate'recip'div'MaxRRMinLLMaxTMinTTunsafeunsafestdownsingleknownwrapunwrapminmaxbaseGHC.Baseid GHC.MaybeJustNothingghc-prim GHC.TypesType Data.MaybeisJustfmapGHC.EnummaxBoundminBoundUnsafeIGHC.ErrerrorGHC.WordWord8D:R:LTYPERatioTrueFalseD:R:LTYPEIntegerD:R:RTYPERatioD:R:RTYPEIntegerD:R:RTYPENatural $fUpxlrlr leNatural leInteger_ignore