Q: Bug? 'Storable' and 'with'
Hi, I am using ghc-5.04 and a code like: with c ( \c' -> hPutBuf h c' (sizeOf c)) fails with "Fail: Prelude.undefined" when "c" is a user defined type, such as a pair: instance (Storable at,Storable bt) => Storable (at,bt) where sizeOf (a,b) = sizeOf a + sizeOf b alignment (a,b) = max (alignment a) (alignment b) peek p = do a <- peek ((castPtr p):: Ptr at) b <- peekByteOff ((castPtr p):: Ptr bt) (sizeOf a) return (a,b) poke p (a,b) = do poke ((castPtr p):: Ptr at) a pokeByteOff ((castPtr p):: Ptr bt) (sizeOf a) b On the other hand, if I replace 'with' with 'with1': with1 :: (Storable a) => a -> ( Ptr a -> IO b ) -> IO b with1 x f = do p <- mallocBytes (sizeOf x) let p'=castPtr p :: Ptr a poke p' x y <- f p' free p return y it seems to work. I could not even get to work 'malloc :: IO (Ptr (Int,Int))', while 'malloc :: IO (Ptr Int)' works fine. Am I doing something wrong, or is there a bug in the library code? Yours, Jan -- ------------------------------------------------------------------------- Jan Kybic <kybic@ieee.org> Odyssee, INRIA, Sophia-Antipolis, France or <Jan.Kybic@sophia.inria.fr>,tel. work +33 492 38 7589, fax 7845 http://www-sop.inria.fr/odyssee/team/Jan.Kybic/index.en.html
participants (1)
-
Jan Kybic