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