Ranged-sets-0.1.0: Doc/Data-Ranged-Boundaries.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.Boundaries</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.Boundaries</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>paul@cogito.org.uk</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
></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"
>class</SPAN
> Ord a => <A HREF="#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3Aadjacent"
>adjacent</A
> :: a -> a -> Bool</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aadjacent"
>adjacent</A
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a => a -> a -> Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AenumAdjacent"
>enumAdjacent</A
> :: (Ord a, Enum a) => a -> a -> Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AboundedAdjacent"
>boundedAdjacent</A
> :: (Ord a, Enum a) => a -> a -> Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3ABoundary"
>Boundary</A
> a</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ABoundaryAbove"
>BoundaryAbove</A
> a</TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ABoundaryBelow"
>BoundaryBelow</A
> a</TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ABoundaryAboveAll"
>BoundaryAboveAll</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ABoundaryBelowAll"
>BoundaryBelowAll</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aabove"
>above</A
> :: Ord v => <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> v -> v -> Bool</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%2F%3E%2F"
>(/>/)</A
> :: Ord v => v -> <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> v -> Bool</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Documentation</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> Ord a => <A NAME="t%3ADiscreteOrdered"
></A
><B
>DiscreteOrdered</B
> a <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>Distinguish between dense and sparse ordered types. A dense type is
one in which any two values <TT
>v1 < v2</TT
> have a third value <TT
>v3</TT
> such that
<TT
>v1 < v3 < v2</TT
>.
</P
><P
>In theory the floating types are dense, although in practice they can only have
finitely many values. This class treats them as dense.
</P
><P
>Tuples up to 4 members are declared as instances. Larger tuples may be added
if necessary.
</P
><P
>This approach was suggested by Ben Rudiak-Gould on comp.lang.functional.
</P
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
>Methods</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A NAME="v%3Aadjacent"
></A
><B
>adjacent</B
> :: a -> a -> Bool</TD
></TR
><TR
><TD CLASS="doc"
>Two values <TT
>x</TT
> and <TT
>y</TT
> are adjacent if <TT
>x < y</TT
> and there does not
exist a third value between them. Always <TT
>False</TT
> for dense types.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:DiscreteOrdered')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:DiscreteOrdered" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Bool</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Char</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Double</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Float</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Int</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Integer</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> Ordering</TD
></TR
><TR
><TD CLASS="decl"
>(Ord a, <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> b) => <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> (a, b)</TD
></TR
><TR
><TD CLASS="decl"
>(Ord a, Ord b, <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> c) => <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> (a, b, c)</TD
></TR
><TR
><TD CLASS="decl"
>(Ord a, Ord b, Ord c, <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> d) => <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> (a, b, c, d)</TD
></TR
><TR
><TD CLASS="decl"
>Integral a => <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> (Ratio a)</TD
></TR
><TR
><TD CLASS="decl"
>Ord a => <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> [a]</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aadjacent"
></A
><B
>adjacent</B
> :: <A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a => a -> a -> Bool</TD
></TR
><TR
><TD CLASS="doc"
>Two values <TT
>x</TT
> and <TT
>y</TT
> are adjacent if <TT
>x < y</TT
> and there does not
exist a third value between them. Always <TT
>False</TT
> for dense types.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AenumAdjacent"
></A
><B
>enumAdjacent</B
> :: (Ord a, Enum a) => a -> a -> Bool</TD
></TR
><TR
><TD CLASS="doc"
>Check adjacency for sparse enumerated types (i.e. where there
is no value between <TT
>x</TT
> and <TT
>succ x</TT
>). Use as the definition of
<A HREF="adjacent.html"
>adjacent</A
> for most enumerated types.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AboundedAdjacent"
></A
><B
>boundedAdjacent</B
> :: (Ord a, Enum a) => a -> a -> Bool</TD
></TR
><TR
><TD CLASS="doc"
>Check adjacency, allowing for case where x = maxBound. Use as the
definition of <A HREF="adjacent.html"
>adjacent</A
> for bounded enumerated types such as Int and Char.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3ABoundary"
></A
><B
>Boundary</B
> a</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>A Boundary is a division of an ordered type into values above
and below the boundary. No value can sit on a boundary.
</P
><P
>Known bug: for Bounded types
</P
><UL
><LI
><PRE
>BoundaryAbove maxBound < BoundaryAboveAll</PRE
></LI
><LI
><PRE
>BoundaryBelow minBound > BoundaryBelowAll</PRE
></LI
></UL
><P
>This is incorrect because there are no possible values in
between the left and right sides of these inequalities.
</P
></TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3ABoundaryAbove"
></A
><B
>BoundaryAbove</B
> a</TD
><TD CLASS="rdoc"
>The argument is the highest value below the boundary.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ABoundaryBelow"
></A
><B
>BoundaryBelow</B
> a</TD
><TD CLASS="rdoc"
>The argument is the lowest value above the boundary.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ABoundaryAboveAll"
></A
><B
>BoundaryAboveAll</B
></TD
><TD CLASS="rdoc"
>The boundary above all values.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ABoundaryBelowAll"
></A
><B
>BoundaryBelowAll</B
></TD
><TD CLASS="rdoc"
>The boundary below all values.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Boundary')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Boundary" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>Arbitrary a => Arbitrary (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a => Eq (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Data-Ranged-Boundaries.html#t%3ADiscreteOrdered"
>DiscreteOrdered</A
> a => Ord (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
>Show a => Show (<A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> a)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aabove"
></A
><B
>above</B
> :: Ord v => <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> v -> v -> Bool</TD
></TR
><TR
><TD CLASS="doc"
>True if the value is above the boundary, false otherwise.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A%2F%3E%2F"
></A
><B
>(/>/)</B
> :: Ord v => v -> <A HREF="Data-Ranged-Boundaries.html#t%3ABoundary"
>Boundary</A
> v -> Bool</TD
></TR
><TR
><TD CLASS="doc"
>Same as <TT
><A HREF="Data-Ranged-Boundaries.html#v%3Aabove"
>above</A
></TT
>, but with the arguments reversed for more intuitive infix
usage.
</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
>