-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : libraries@haskell.org
--- Stability : provisional
+-- Stability : stable
-- Portability : portable
--
--- Class of index types.
---
--- The "Ix" class is used to map a continuous subrange of values in a type onto
--- integers. It is used primarily for array indexing (see Section 6
--- <http://www.haskell.org/onlinelibrary/array.html#arrays>). The "Ix"
--- class contains the methods range, index, and inRange. The 'index' operation
--- maps a bounding pair, which defines the lower and upper bounds of the range,
--- and a subscript, to an integer. The 'range' operation enumerates all
--- subscripts; the 'inRange' operation tells whether a particular subscript
--- lies in the range defined by a bounding pair.
---
--- An implementation is entitled to assume the following laws about these
--- operations:
---
--- > range (l,u) !! index (l,u) i == i -- when i is in range
---
--- > inRange (l,u) i == i `elem` range (l,u)
+-- The 'Ix' class is used to map a contiguous subrange of values in
+-- type onto integers. It is used primarily for array indexing
+-- (see the array package).
--
-----------------------------------------------------------------------------
module Data.Ix
(
- Ix
- ( range -- :: (Ix a) => (a,a) -> [a]
- , index -- :: (Ix a) => (a,a) -> a -> Int
- , inRange -- :: (Ix a) => (a,a) -> a -> Bool
- , rangeSize -- :: (Ix a) => (a,a) -> Int
- )
+ -- * The 'Ix' class
+ Ix
+ ( range -- :: (Ix a) => (a,a) -> [a]
+ , index -- :: (Ix a) => (a,a) -> a -> Int
+ , inRange -- :: (Ix a) => (a,a) -> a -> Bool
+ , rangeSize -- :: (Ix a) => (a,a) -> Int
+ )
-- Ix instances:
--
-- Ix Char
-- Implementation checked wrt. Haskell 98 lib report, 1/99.
- -- * Deriving Instances of Ix
+ -- * Deriving Instances of 'Ix'
-- | Derived instance declarations for the class 'Ix' are only possible
-- for enumerations (i.e. datatypes having only nullary constructors)
-- and single-constructor datatypes, including arbitrarily large tuples,
-- is the same numbering defined by the 'Enum' class. For example, given
-- the datatype:
--
- -- > data Colour = Red | Orange | Yellow | Green | Blue | Indigo | Violet
+ -- > data Colour = Red | Orange | Yellow | Green | Blue | Indigo | Violet
--
-- we would have:
--
- -- > range (Yellow,Blue) == [Yellow,Green,Blue]
- -- > index (Yellow,Blue) Green == 1
- -- > inRange (Yellow,Blue) Red == False
+ -- > range (Yellow,Blue) == [Yellow,Green,Blue]
+ -- > index (Yellow,Blue) Green == 1
+ -- > inRange (Yellow,Blue) Red == False
--
-- * For single-constructor datatypes, the derived instance declarations
-- are as shown for tuples in Figure 1
) where
-import Prelude
+-- import Prelude
#ifdef __GLASGOW_HASKELL__
import GHC.Arr
#ifdef __HUGS__
import Hugs.Prelude( Ix(..) )
#endif
+
+#ifdef __NHC__
+import Ix (Ix(..))
+#endif
+