module Graphics.Luminance.Core.Tuple where
import Foreign.Storable ( Storable(..) )
import Foreign.Ptr ( castPtr, plusPtr )
data a :. b = a :. b deriving (Eq,Functor,Ord,Show)
infixr 6 :.
instance (Storable a,Storable b) => Storable (a :. b) where
sizeOf _ = sizeOf (undefined :: a) + sizeOf (undefined :: b)
alignment _ = 4
peek p = do
a <- peek $ castPtr p
b <- peek . castPtr $ p `plusPtr` sizeOf (undefined :: a)
pure $ a :. b
poke p (a :. b) = do
poke (castPtr p) a
poke (castPtr $ p `plusPtr` sizeOf (undefined :: a)) b