[Haskell-cafe] How does one delare a 2D STUArray in Haskell?

minh thu noteed at gmail.com
Fri Sep 25 03:51:08 EDT 2009


2009/9/25 minh thu <noteed at gmail.com>:
> 2009/9/25 Casey Hawthorne <caseyh at 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


More information about the Haskell-Cafe mailing list