[Haskell-cafe] Re: [Haskell] Recursive definition of fibonacci with Data.Vector

Roman Leshchinskiy rl at cse.unsw.edu.au
Sun Mar 7 20:45:38 EST 2010


On 08/03/2010, at 12:17, Alexander Solla wrote:

>> GHC even optimizes it to:
>> 
>>    fib = fib
> 
> Sounds like an implementation bug, not an infinite dimensional vector space bug.  My guess is that strictness is getting in the way, and forcing what would be a lazy call to fib in the corresponding list code -- fib = 0 : 1 : (zipWith (+) fib (tail fib)) -- into a strict one.
> 
> In fact, I'm pretty sure that's what the problem is:
> 
> data Vector a = Vector {-# UNPACK #-} !Int
>                        {-# UNPACK #-} !Int
>                        {-# UNPACK #-} !(Array a)

The problem is that you have to allocate an Array of a specific length when creating a Vector. Arrays are finite by definition. It's not a bug, it's a feature.

Note that in the context of package vector, "vector" means a 1-dimensional, 0-indexed array. This is not unusual - see, for instance, the standard C++ library.

Roman




More information about the Haskell-Cafe mailing list