
On 2008-02-15, Jed Brown
I propose that the following instance be added to base:
instance (RealFloat a, Storable a) =3D> Storable (Complex a) where sizeOf z =3D 2 * sizeOf (realPart z) alignment z =3D sizeOf (realPart z) peek p =3D do [r,i] <- peekArray 2 (castPtr p) return (r :+ i) poke p (r :+ i) =3D pokeArray (castPtr p) [r,i]
I've been using a slightly different instance: instance (RealFloat a, Storable a) => Storable (Complex a) where sizeOf x = 2 * sizeOf (f x) alignment x = alignment (f x) poke x (a :+ b) = do let y = castPtr x poke y a pokeElemOff y 1 b peek x = do let y = castPtr x a <- peek y b <- peekElemOff y 1 return (a :+ b) f :: Complex a -> a f _ = undefined With a small constant number of elements, I think it makes more sense to just store them explicitly rather than through a list. I didn't even think of using realPart, but it makes sense. -- Aaron Denney -><-