
Hi I am trying to implement Show for a storable-mutable-vector. Does anyone have a clue why the type-system is killing me :-) Code is below... Cheers Felix ---- {-# LANGUAGE ExistentialQuantification #-} import Control.Monad (liftM2) import qualified Data.Vector.Unboxed as V import qualified Data.Vector.Unboxed.Mutable as MV import Data.Vector.Storable.Mutable import GHC.Prim (RealWorld) import Control.Monad.Primitive import Control.Monad import qualified Data.Vector as VEC import qualified Data.Vector.Generic.Mutable as GM import Data.Int import Data.Typeable.Internal import Data.Primitive data Row = forall m s. (Storable s, MV.Unbox s, Prim s, PrimMonad m) => Row (MV.MVector (PrimState m) s) instance Show Row where show (Row row) = do let xx = MV.read row 0 "Done" main :: IO () main = do print "Done" I get this error: Could not deduce (PrimState m ~ PrimState m0) from the context (Storable s, MV.Unbox s, Prim s, PrimMonad m) bound by a pattern with constructor Row :: forall (m :: * -> *) s. (Storable s, MV.Unbox s, Prim s, PrimMonad m) => MV.MVector (PrimState m) s -> Row, in an equation for `show' NB: `PrimState' is a type function, and may not be injective Expected type: MV.MVector (PrimState m0) s Actual type: MV.MVector (PrimState m) s In the first argument of `MV.read', namely `row' In the expression: MV.read row 0