On 01-Aug-2002, Hal Daume III <[EMAIL PROTECTED]> wrote: > Okay, I'm dumb and can't figure this out. I'm migrating hMPI from GHC > 4.08 to GHC 5.04 (fun fun) and am having trouble writing an instance of > Storable. The relevant information is: > > > import Foreign.Storable > > type MPI_Rank_Type = Int > > newtype MPI_Rank = MPI_Rank MPI_Rank_Type deriving (Eq) > > > > instance Storable MPI_Rank where > > sizeOf (MPI_Rank r) = sizeOf r > > alignment (MPI_Rank r) = alignment r > > peek addr = do r <- peek addr > > return (MPI_Rank r) > > poke addr (MPI_Rank r) = poke addr r > > which doesn't work [...] > I have no idea what's wrong. if i make it "...do (r :: Int) <- ..." it > complains: [...] > it's like it doesn't realize that "peek" is part of the class and can be > overloaded.
The argument type for `peek' has changed from `Addr' (or something like that) to a parameterized type `Ptr a'. So the problem is essentially that your `peek' method takes a parameter of type `Ptr MPI_Rank', but needs to call `peek' with a parameter of type `Ptr MPI_Rank_Type'. You need to use `castPtr' to convert between the two pointer types. I think the following (untested) code should do it: peek addr = do r <- peek (castPtr addr) return (MPI_Rank r) Likewise for `poke'. -- Fergus Henderson <[EMAIL PROTECTED]> | "I have always known that the pursuit The University of Melbourne | of excellence is a lethal habit" WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp. _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell