!3T      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS SafeG rangeThe Range Data structure; it is capable of representing any type of range. This is the primary data structure in this library. Everything should be possible to convert back into this datatype. All ranges in this structure are inclusively bound.range(Represents a single element as a range. SingletonRange a is equivalent to 1SpanRange (Bound a Inclusive) (Bound a Inclusive).rangevRepresents a bounded span of elements. The first argument is expected to be less than or equal to the second argument.rangeIRepresents a range with a finite lower bound and an infinite upper bound.rangeIRepresents a range with an infinite lower bound and a finite upper bound.range-Represents an infinite range over all values.range0Represents a bound at a particular value with a  ]. There is no implicit understanding if this is a lower or upper bound, it could be either. range$The value at the edge of this bound. rangeThe type of bound. Should be   or  . rangeRepresents a type of boundary. range:The value at the boundary should be included in the bound. range:The value at the boundary should be excluded in the bound. TUVWSafe& rangeMathematically equivalent to [x, y].x +=+ y is the short version of 1SpanRange (Bound x Inclusive) (Bound y Inclusive)rangeMathematically equivalent to [x, y).x +=* y is the short version of 1SpanRange (Bound x Inclusive) (Bound y Exclusive)rangeMathematically equivalent to (x, y].x *=+ y is the short version of 1SpanRange (Bound x Exclusive) (Bound y Inclusive)rangeMathematically equivalent to (x, y).x *=* y is the short version of 1SpanRange (Bound x Exclusive) (Bound y Exclusive)rangeMathematically equivalent to  [x, Infinity).lbi x is the short version of #LowerBoundRange (Bound x Inclusive)rangeMathematically equivalent to  (x, Infinity).lbe x is the short version of #LowerBoundRange (Bound x Exclusive)rangeMathematically equivalent to  (Infinity, x].ubi x is the short version of #UpperBoundRange (Bound x Inclusive)rangeMathematically equivalent to  (Infinity, x).ube x is the short version of #UpperBoundRange (Bound x Exclusive)rangeShorthand for the  Safe'!XYZ[\]^_`abcdefghijklmnopqSafe'rstuvw Safe(xyz{|}~ Safe4>,rangeThis is an F-Algebra. You don't need to know what this is in order to be able to use this module, but, if you are interested you can  Chttps://www.schoolofhaskell.com/user/bartosz/understanding-algebrasread more on School of Haskell.  Safe, Safe-"Safe=?@AIn this example, you know that the values are all of the type _. Because of this, you know that there are no values between 5 and 6. You may expect that the . function should "just know" that it can merge these together; but it can't because it does not have the required constraints. This becomes more obvious if you modify the example to use  instead:9mergeRanges [1.5 +=+ 5.5, 6.5 +=+ 10.5] :: [Range Double][1.5 +=+ 5.5,6.5 +=+ 10.5]Now we can see that there are an infinite number of values between 5.5 and 6.5 and thus no such join between the two ranges could occur.LThis function, joinRanges, provides the missing piece that you would expect:?joinRanges $ mergeRanges [1 +=+ 5, 6 +=+ 10] :: [Range Integer] [1 +=+ 10]PYou can use this method to ensure that all ranges for whom the value implements 5 can be compressed to their smallest representation.% "#$%&'()*+,-./0%()*+,-&'."#$%/0 Safe>1rangeKThese are the arguments that will be used when parsing a string as a range.3range$A separator that represents a union.4range5A separator that separates the two halves of a range.5range,A separator that implies an unbounded range.6rangeThese are the default arguments that are used by the parser. Please feel free to use the default arguments for you own parser and modify it from the defaults at will.7rangeGiven a string, this function will either return a parse error back to the user or the list of ranges that are represented by the parsed string. Very useful for CLI programs that need to load ranges from a single-line string.8rangeIf you disagree with the default characters for separating ranges then this function can be used to customise them, up to a point.9rangeeGiven the parser arguments this returns a parsec parser that is capable of parsing a list of ranges. 123456789 781234569SafeHrangeAChecks if the value provided is above all of the ranges provided.IrangeAChecks if the value provided is below all of the ranges provided.;<=>?@ABCDEFGHIJKLMNO>?@ABCDEFGHIJKLMNO;<=  !"#$ % &'()*+,-./+,-*0123456789:;<=>?@ABCDEEF !"#$357+,-*9:GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn o p q r s t u v w x y z { | } ~  &      $range-0.3.0.2-JdFyDIo4FAZBXvbjhKSsTQData.Range.Parser Data.RangeData.Range.Algebra Data.RangesData.Range.DataData.Range.OperatorsData.Range.UtilData.Range.SpansData.Range.RangeInternalData.Range.Algebra.InternalData.Range.Algebra.RangeData.Range.Algebra.Predicateparsec-3.1.13.0Text.Parsec.Error ParseErrorRangeSingletonRange SpanRangeLowerBoundRangeUpperBoundRange InfiniteRangeBound boundValue boundType BoundType Inclusive Exclusive+=++=**=+*=*lbilbeubiubeinfAlgebra RangeExpr RangeAlgebraevalconstinvertunion intersection difference$fRangeAlgebra->$fRangeAlgebra[] rangesOverlap rangesAdjoininRangeinRanges aboveRange aboveRanges belowRange belowRanges mergeRanges fromRanges joinRangesRangeParserArgsArgsunionSeparatorrangeSeparatorwildcardSymbol defaultArgs parseRangescustomParseRangesranges$fShowRangeParserArgsRangesunRanges$fFunctorRanges$fMonoidRanges$fSemigroupRanges $fShowRanges OverlapTypeAdjoinSeparateOverlap compareLower compareHighercompareLowerIntersectioncompareHigherIntersectioncompareUpperToLower minBounds maxBoundsminBoundsIntersectionmaxBoundsIntersection insertionSort invertBound isEmptySpanremoveEmptySpansboundsOverlapType orOverlapType pointJoinTypeboundCmpboundIsBetweensingletonInSpanagainstLowerBoundagainstUpperBound takeEvenlysafeHeadpairslowestValueInLowerBoundhighestValueInUpperBoundinsertionSortSpansspanCmpintersectSpans joinSpans unionSpans invertSpans RangeMergeIRMRM spanRangeslargestUpperBoundlargestLowerBoundemptyRangeMerge storeRange storeRanges loadRangesexportRangeMergeintersectSpansRM intersectWithfixLowerfixUpperintersectionRangeMergescalculateBoundOverlapunionRangeMergesfilterLowerBoundfilterUpperBoundinvertRMjoinRM updateBound unmergeRMgetFree RangeExprF Difference IntersectionInvertUnionrangeMergeAlgebra rangeAlgebrapredicateAlgebrabaseGHC.EnumEnum integer-gmpGHC.Integer.TypeIntegerghc-prim GHC.TypesDouble