Sorry if this has been reported before.
I shouldn't be able to crash ghc or hugs without using any "unsafe"
features, right? Well, here 'tis:
> module CrashArray where
>
> import Array
> import Ix
>
> newtype CrashIx = CrashIx Int deriving (Ord, Eq, Show)
>
> instance Enum CrashIx where
> toEnum x = (CrashIx x)
> fromEnum (CrashIx x) = x
>
> instance Ix CrashIx where
> inRange (_,_) _ = True
> index (_,_) (CrashIx x) = x
> range (x,y) = [x..y]
>
> myArray = listArray (CrashIx 0, CrashIx 0) [0]
> crash = myArray ! (CrashIx maxBound)
In ghci-5.00, I get a segfault and hugs-feb-2000 says:
INTERNAL ERROR: Error in graph
Now, admittedly my Ix instance is broken, but I don't think I should be
able to segfault the interpreter.
Unfortunately, I think the only way to fix this without changing the
Library Report would be to add another layer of range checking to the
array implementation. Bleh. Note also that the (inefficient)
implementation in the report wouldn't crash, but would get the "wrong"
error: "Undefined array element" instead of "Index out of range".
I think we might describe this as a bug in the Library Report, rather
than in any particular Haskell implementation.
Enjoy!
Matt Harden
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell