packages feed

Ranged-sets-0.1.0: Doc/Data-Ranged-RangedSet.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>Data.Ranged.RangedSet</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock.js" TYPE="text/javascript"
></SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
></TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>Data.Ranged.RangedSet</FONT
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>Ranged Set Type
</A
></DT
><DT
><A HREF="#2"
>Ranged Set construction functions and their Preconditions
</A
></DT
><DT
><A HREF="#3"
>Predicates
</A
></DT
><DT
><A HREF="#4"
>Set Operations
</A
></DT
><DT
><A HREF="#5"
>Useful Sets
</A
></DT
><DT
><A HREF="#6"
>QuickCheck Properties
</A
></DT
><DD
><DL
><DT
><A HREF="#7"
>Construction
</A
></DT
><DT
><A HREF="#8"
>Basic Operations
</A
></DT
><DT
><A HREF="#9"
>Some Identities and Inequalities
</A
></DT
></DL
></DD
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetRanges"
>rSetRanges</A
> :: <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmakeRangedSet"
>makeRangedSet</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AunsafeRangedSet"
>unsafeRangedSet</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvalidRangeList"
>validRangeList</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnormaliseRangeList"
>normaliseRangeList</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSingleton"
>rSingleton</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetIsEmpty"
>rSetIsEmpty</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A-%3F-"
>(-?-)</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetHas"
>rSetHas</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A-%3C%3D-"
>(-&lt;=-)</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetIsSubset"
>rSetIsSubset</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A-%3C-"
>(-&lt;-)</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetIsSubsetStrict"
>rSetIsSubsetStrict</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A-%5C%2F-"
>(-\/-)</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetUnion"
>rSetUnion</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A-%2F%5C-"
>(-/\-)</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetIntersection"
>rSetIntersection</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A-%21-"
>(-!-)</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetDifference"
>rSetDifference</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetNegation"
>rSetNegation</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetEmpty"
>rSetEmpty</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetFull"
>rSetFull</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArSetUnfold"
>rSetUnfold</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a -&gt; (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a -&gt; <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a) -&gt; (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a -&gt; Maybe (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a)) -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="1"
>Ranged Set Type
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3ARSet"
></A
><B
>RSet</B
> v</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>An RSet (for Ranged Set) is a list of ranges.  The ranges must be sorted
 and not overlap.
</TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:RSet')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:RSet" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>(Arbitrary v, <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v, Show v) =&gt; Arbitrary (<A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v)</TD
></TR
><TR
><TD CLASS="decl"
>(<A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v, ??? v) =&gt; Eq (<A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; Monoid (<A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
>(<A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v, ??? v) =&gt; Show (<A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetRanges"
></A
><B
>rSetRanges</B
> :: <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v]</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="2"
>Ranged Set construction functions and their Preconditions
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AmakeRangedSet"
></A
><B
>makeRangedSet</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="doc"
>Create a new Ranged Set from a list of ranges.  The list may contain
 ranges that overlap or are not in ascending order.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AunsafeRangedSet"
></A
><B
>unsafeRangedSet</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="doc"
>Create a new Ranged Set from a list of ranges. <TT
>validRangeList ranges</TT
> 
 must return <TT
>True</TT
>.  This precondition is not checked.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AvalidRangeList"
></A
><B
>validRangeList</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; Bool</TD
></TR
><TR
><TD CLASS="doc"
>Determine if the ranges in the list are both in order and non-overlapping.
 If so then they are suitable input for the unsafeRangedSet function.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AnormaliseRangeList"
></A
><B
>normaliseRangeList</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v] -&gt; [<A HREF="Data-Ranged-Ranges.html#t%3ARange"
>Range</A
> v]</TD
></TR
><TR
><TD CLASS="doc"
>Rearrange and merge the ranges in the list so that they are in order and
 non-overlapping.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSingleton"
></A
><B
>rSingleton</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="doc"
>Create a Ranged Set from a single element.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="3"
>Predicates
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetIsEmpty"
></A
><B
>rSetIsEmpty</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="doc"
>True if the set has no members.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A-%3F-"
></A
><B
>(-?-)</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetHas"
></A
><B
>rSetHas</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; v -&gt; Bool</TD
></TR
><TR
><TD CLASS="doc"
>True if the value is within the ranged set.  Infix precedence is left 5.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A-%3C%3D-"
></A
><B
>(-&lt;=-)</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetIsSubset"
></A
><B
>rSetIsSubset</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="doc"
><P
>True if the first argument is a subset of the second argument, or is 
 equal. 
</P
><P
>Infix precedence is left 5.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A-%3C-"
></A
><B
>(-&lt;-)</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetIsSubsetStrict"
></A
><B
>rSetIsSubsetStrict</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; Bool</TD
></TR
><TR
><TD CLASS="doc"
><P
>True if the first argument is a strict subset of the second argument.
</P
><P
>Infix precedence is left 5.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
>Set Operations
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A-%5C%2F-"
></A
><B
>(-\/-)</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetUnion"
></A
><B
>rSetUnion</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="doc"
>Set union for ranged sets.  Infix precedence is left 6.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A-%2F%5C-"
></A
><B
>(-/\-)</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetIntersection"
></A
><B
>rSetIntersection</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="doc"
>Set intersection for ranged sets.  Infix precedence is left 7.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A-%21-"
></A
><B
>(-!-)</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetDifference"
></A
><B
>rSetDifference</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> v =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> v</TD
></TR
><TR
><TD CLASS="doc"
>Set difference.  Infix precedence is left 6.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetNegation"
></A
><B
>rSetNegation</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a -&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>Set negation.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
>Useful Sets
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetEmpty"
></A
><B
>rSetEmpty</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>The empty set.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetFull"
></A
><B
>rSetFull</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a =&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>The set that contains everything.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArSetUnfold"
></A
><B
>rSetUnfold</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a</TD
><TD CLASS="rdoc"
>A first lower boundary.
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a -&gt; <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a)</TD
><TD CLASS="rdoc"
>A function from a lower boundary to an upper boundary, which must
 return a result greater than the argument (not checked).
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a -&gt; Maybe (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a))</TD
><TD CLASS="rdoc"
>A function from a lower boundary to <TT
>Maybe</TT
> the successor lower 
 boundary, which must return a result greater than the argument 
 (not checked).
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Data-Ranged-RangedSet.html#t%3ARSet"
>RSet</A
> a</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Construct a range set.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="6"
>QuickCheck Properties
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section3"
><A NAME="7"
>Construction
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>A normalised range list is valid for unsafeRangedSet
</P
><PRE
> prop_validNormalised ls = validRangeList $ normaliseRangeList ls
    where types = ls :: [Range Double]
</PRE
><P
>Iff a value is in a range list then it is in a ranged set
constructed from that list.
</P
><PRE
> prop_has ls v = (ls `rangeListHas` v) == rangedSet ls -?- v
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section3"
><A NAME="8"
>Basic Operations
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Iff a value is in either of two ranged sets then it is in the union of
those two sets.
</P
><PRE
> prop_union rs1 rs2 v =
    (rs1 -?- v || rs2 -?- v) == ((rs1 -\/- rs2) -?- v)
</PRE
><P
>Iff a value is in both of two ranged sets then it is in the intersection
of those two sets.
</P
><PRE
> prop_intersection rs1 rs2 v =
    (rs1 -?- v &amp;&amp; rs2 -?- v) == ((rs1 -/\- rs2) -?- v)
</PRE
><P
>Iff a value is in ranged set 1 and not in ranged set 2 then it is in the
difference of the two.
</P
><PRE
> prop_difference rs1 rs2 v = 
    (rs1 -?- v &amp;&amp; not (rs2 -?- v)) == ((rs1 -!- rs2) -?- v)
</PRE
><P
>Iff a value is not in a ranged set then it is in its negation.      
</P
><PRE
> prop_negation rs v = rs -?- v == not (rSetNegation rs -?- v)
</PRE
><P
>A set that contains a value is not empty
</P
><PRE
> prop_not_empty rs v = (rs -?- v) ==&gt; not (rSetIsEmpty rs)
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section3"
><A NAME="9"
>Some Identities and Inequalities
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>The empty set has no members.
</P
><PRE
> prop_empty v = not (rSetEmpty -?- v)
</PRE
><P
>The full set has every member.
</P
><PRE
> prop_full v = rSetFull -?- v
</PRE
><P
>The intersection of a set with its negation is empty.
</P
><PRE
> prop_empty_intersection rs =
    rSetIsEmpty (rs -/\- rSetNegation rs) 
</PRE
><P
>The union of a set with its negation is full.
</P
><PRE
> prop_full_union rs v =
    rSetIsFull (rs -\/- rSetNegation rs)
</PRE
><P
>The union of two sets is the non-strict superset of both.
</P
><PRE
> prop_union_superset rs1 rs2 =
    rs1 -&lt;=- u &amp;&amp; rs2 -&lt;=- u 
    where
       u = rs1 -\/- rs2
</PRE
><P
>The intersection of two sets is the non-strict subset of both.
</P
><PRE
> prop_intersection_subset rs1 rs2 =
    i -&lt;=- rs1 &amp;&amp; i -&lt;=- rs2
    where
       i = rs1 -/\- rs2
</PRE
><P
>The difference of two sets intersected with the subtractand is empty.
</P
><PRE
> prop_diff_intersect rs1 rs2 =
    rSetIsEmpty ((rs1 -!- rs2) -/\- rs2)
</PRE
><P
>A set is the non-strict subset of itself.
</P
><PRE
> prop_subset rs = rs -&lt;=- rs
</PRE
><P
>A set is not the strict subset of itself.
</P
><PRE
> prop_strict_subset rs = not (rs -&lt;- rs)
</PRE
><P
>If rs1 - rs2 is not empty then the union of rs1 and rs2 will be a strict 
superset of rs2.
</P
><PRE
> prop_union_strict_superset rs1 rs2 =
    (not $ rSetIsEmpty (rs1 -!- rs2))
    ==&gt; (rs2 -&lt;- (rs1 -\/- rs2))
</PRE
><P
>Intersection commutes
</P
><PRE
> prop_intersection_commutes rs1 rs2 =
    (rs1 -/\- rs2) == (rs2 -/\- rs1)
</PRE
><P
>Union commutes
</P
><PRE
> prop_union_commutes rs1 rs2 =
    (rs1 -\/- rs2) == (rs2 -\/- rs1)
</PRE
><P
>Intersection associates
</P
><PRE
> prop_intersection_associates rs1 rs2 rs3 =
    ((rs1 -/\- rs2) -/\- rs3) == (rs1 -/\- (rs2 -/\- rs3))
</PRE
><P
>Union associates
</P
><PRE
> prop_union_associates rs1 rs2 rs3 =
    ((rs1 -\/- rs2) -\/- rs3) == (rs1 -\/- (rs2 -\/- rs3))
</PRE
><P
>De Morgan's Law for Intersection
</P
><PRE
> prop_de_morgan_intersection rs1 rs2 =
    rSetNegation (rs1 -/\- rs2) == (rSetNegation rs1 -\/- rSetNegation rs2)
</PRE
><P
>De Morgan's Law for Union
</P
><PRE
> prop_de_morgan_union rs1 rs2 =
    rSetNegation (rs1 -\/- rs2) == (rSetNegation rs1 -/\- rSetNegation rs2)
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 0.8</TD
></TR
></TABLE
></BODY
></HTML
>