can't write instance Storable

Hal Daume III hdaume@ISI.EDU
Thu, 1 Aug 2002 11:47:54 -0700 (PDT)


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; ghc complains:

/nfs/isd/hdaume/download/hmpi-0.9.3/src/Foo.hs:12:
    Couldn't match `MPI_Rank_Type' against `MPI_Rank'
	Expected type: MPI_Rank_Type
	Inferred type: MPI_Rank
    In the first argument of `MPI_Rank', namely `r'
    In the first argument of `return', namely `(MPI_Rank r)'
Failed, modules loaded: none.


I have no idea what's wrong.  if i make it "...do (r :: Int) <- ..." it
complains:

/nfs/isd/hdaume/download/hmpi-0.9.3/src/Foo.hs:12:
    Couldn't match `Int' against `MPI_Rank'
	Expected type: Int
	Inferred type: MPI_Rank
    When checking the pattern: r :: Int
    In a 'do' expression pattern binding: (r :: Int) <- peek addr
Failed, modules loaded: none.

it's like it doesn't realize that "peek" is part of the class and can be
overloaded.

someone please clear this up and tell me what obvious thing i'm missing...

Thanks!

 - Hal

--
Hal Daume III

 "Computer science is no more about computers    | hdaume@isi.edu
  than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume