[Haskell-cafe] What's the deal with Clean?

Gregory Crosswhite gcross at phys.washington.edu
Tue Nov 3 22:07:26 EST 2009


Actually, it's not a typo.  If you look at the source, what you'll see  
is

indexU arr n = indexS (streamU arr) n

and then tracking down indexS, you'll see


indexS (Stream next s0 _) n0
     | n0 < 0    = error "Data.Array.Vector.Stream.indexS: negative  
index"
     | otherwise = loop_index n0 s0
   where
     loop_index n s = case next s of
       Yield x s' | n == 0    -> x
                  | otherwise -> s' `seq` loop_index (n-1) s'
       Skip    s'             -> s' `seq` loop_index  n    s'
       Done                   -> error  
"Data.Array.Vector.Stream.indexS: index too large"


So in other words, indexU really does have O(n) complexity since it  
first converts the array into a stream and then walks down the stream  
in order to find the desired element.

Cheers,
Greg


On Nov 3, 2009, at 6:25 PM, Roman Leshchinskiy wrote:

> On 04/11/2009, at 13:12, brian wrote:
>
>> indexU :: UA e => UArr e -> Int -> e
>>
>> O(n). indexU extracts an element out of an immutable unboxed array.
>
> This is a typo (unless Don inserted a nop loop into the original DPH  
> code).
>
> Roman
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list