X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FIx.hs;h=a01e5162659af6e8dd4aa525a7b3900c3009a1ec;hb=HEAD;hp=f7d41f32cfb0cc068f9787b1d102014f3f06ef8a;hpb=9fa9bc17072a58c0bae2cce4764d38677e96ac29;p=ghc-base.git diff --git a/Data/Ix.hs b/Data/Ix.hs index f7d41f3..a01e516 100644 --- a/Data/Ix.hs +++ b/Data/Ix.hs @@ -1,27 +1,29 @@ +{-# LANGUAGE CPP #-} + ----------------------------------------------------------------------------- -- | -- Module : Data.Ix -- Copyright : (c) The University of Glasgow 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org --- Stability : provisional +-- Stability : stable -- Portability : portable -- --- $Id: Ix.hs,v 1.3 2002/04/24 16:31:39 simonmar Exp $ --- --- Class of index types. --- +-- 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 @@ -34,10 +36,43 @@ module Data.Ix -- ... -- Implementation checked wrt. Haskell 98 lib report, 1/99. + + -- * 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, + -- whose constituent types are instances of 'Ix'. + -- + -- * For an enumeration, the nullary constructors are assumed to be + -- numbered left-to-right with the indices being 0 to n-1 inclusive. This + -- is the same numbering defined by the 'Enum' class. For example, given + -- the datatype: + -- + -- > 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 + -- + -- * 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 #endif + +#ifdef __HUGS__ +import Hugs.Prelude( Ix(..) ) +#endif + +#ifdef __NHC__ +import Ix (Ix(..)) +#endif +