Storable instance for Complex
Jed Brown
jed at 59A2.org
Sun Feb 17 10:14:22 EST 2008
On 15 Feb 2008, lemming at henning-thielemann.de wrote:
> On Fri, 15 Feb 2008, Jed Brown wrote:
>> I propose that the following instance be added to base:
>>
>> instance (RealFloat a, Storable a) => Storable (Complex a) where
>> sizeOf z = 2 * sizeOf (realPart z)
>> alignment z = sizeOf (realPart z)
>> peek p = do
>> [r,i] <- peekArray 2 (castPtr p)
>> return (r :+ i)
>> poke p (r :+ i) = pokeArray (castPtr p) [r,i]
>>
>> This instance is binary compatible with C99, C++ and Fortran complex types.
>>
>> It is currently needed by at least two independent packages: hmatrix and
>> fft. Since it is natural for user code to use both of these packages, we
>> need to move the instance to a common location.
>>
>> http://hackage.haskell.org/trac/ghc/ticket/2099
>
> I also need it for signal processing.
In light of the fact that several packages need this instance, I created
a package storable-complex (on Hackage) which has the instance in
Foreign.Storable.Complex. In the interest of enabling our packages to
play nicely *now*, I would like to encourage everyone needing this
instance to get it from this common source. When it (hopefully) makes
it into base, we can use a flag in the .cabal file to get it from base
instead of this package.
Note on style: I decided I agree with Aaron about using explicit
peek/poke rather than a list. Thus the instance in storable-complex is
written:
instance (RealFloat a, Storable a) => Storable (Complex a) where
sizeOf z = 2 * sizeOf (realPart z)
alignment z = sizeOf (realPart z)
peek p = do let q = castPtr p
r <- peek q
i <- peekElemOff q 1
return (r :+ i)
poke p (r :+ i) = do let q = (castPtr p)
poke q r
pokeElemOff q 1 i
Is Storable/Complex really a special case, or are there other cases
where equivalent instances are defined in different packages? If so,
would a language extension allowing the user (importing the same
instance from multiple sources) to specify that the instances are
actually identical be helpful?
Jed
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/libraries/attachments/20080217/3c1af382/attachment.bin
More information about the Libraries
mailing list