2009/9/25 minh thu <not...@gmail.com>: > 2009/9/25 Casey Hawthorne <cas...@istar.ca>: >> Well that makes sense, but for a learner, how is he/she supposed to >> know that 'i' could be '(i,i)' or for that matter a tuple of n of >> those i's? >> >> "STUArray s i e" >> >> Could you also have a tuple of states? >> >> Obviosly, 'e' could be a tuple, for instance (Int,Char) > > Well, 'i' is just a type variable, just like 'a' and 'b' are type > variables in the function type > > map :: (a -> b) -> [a] -> [b] > > I guess you know that you can "map" a suitable function on a list of > pairs, right ? > > Type variable mean you can use whatever type you want, including > pairs, lists, or whatever. > > So you can have list of whaterver you want, and use whatever you want > as indices in arrays.... BUT! > > But the whatever you want can be constrained a bit: here, the > constraint is that the type of the indices must be in Ix, this is what > the "Ix i =>" means. > > For instance, we said we can put whatever you want in a list. But ask > GHCi what is the type of > > inc = map (+1) : > > Prelude> :t map (+1) > map (+1) :: (Num a) => [a] -> [a] > > You see that you can use "inc" on list of whatever you want (the "a") > *provided* the "a" is in Num, the "Num a =>" part of the type > signature. > > Now, you have to look if the type you want to use for your indices is in Ix. > Look at [1] and you see that > > (Ix a, Ix b) => Ix ((,) a b) > > is an Instance of Ix. > > (The right part can be read as (a,b) instead of (,) a b). > > So a pair is in Ix provided its elements are in Ix too. > > [1] > http://hackage.haskell.org/packages/archive/base/4.0.0.0/doc/html/GHC-Arr.html#t%3AIx >
Forget to say this: You don't have a pair of indices or a pair of states: you have an index which is a pair, and you can have a state which is a pair. Cheers, Thu _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe