[Haskell-beginners] better way to create Array defined on all
indices
Daniel Fischer
daniel.is.fischer at web.de
Thu Oct 16 10:26:30 EDT 2008
Am Mittwoch, 15. Oktober 2008 23:05 schrieb Larry Evans:
> I'd like to have an Array indices values
> (see http://haskell.org/onlinereport/array.html)
> defined on [minBound::indices ... maxBound::indices].
> The attached does this; however, it also allows
> duplicate definitions (e.g. in the attached, the
> value for Term index is defined twice).
>
> Is there a better way to do this? Maybe a
> way that doesn't use all the contexts?
I don't know of a better way to do it, your way is fine.
What do you mean by "contexts" here? Of course, Bounded and Ix are necessary
to define array_complete. If you want to perhaps leave some array entries
undefined, there's no problem with that, as long as you don't try to access
an undefined entry later.
> Also, is there a way to do it so that the value
> associated with an index is not redefined?
From GHC's user's guide, section 13.1.1.6:
GHC's implementation of array takes the value of an array slot from the last
(index,value) pair in the list, and does no checking for duplicates. The
reason for this is efficiency, pure and simple.
If you want to throw an error for duplicate definitions, you have to scan the
eqs list manually before passing it to array.
>
> In effect, I'm making a map, but using an Array
> as the implementation because, I guess, it would be
> a bit faster.
>
> TIA.
Cheers,
Daniel
More information about the Beginners
mailing list