module Data.Yarr.Utils.Storable where import Foreign import Data.Yarr.Utils.FixedVector as V instance (Storable e, Vector v e) => Storable (v e) where sizeOf _ = let esize = sizeOf (undefined :: e) n = arity (undefined :: (Dim v)) in n * esize alignment _ = alignment (undefined :: e) peek ptr = let eptr = castPtr ptr in V.generateM (\i -> peekElemOff eptr i) poke ptr v = let eptr = castPtr ptr in imapM_ (\i e -> pokeElemOff eptr i e) v {-# INLINE sizeOf #-} {-# INLINE alignment #-} {-# INLINE peek #-} {-# INLINE poke #-}