module Foreign.Storable.Tuple where import qualified Foreign.Storable.Newtype as Newtype import Foreign.Storable.Record.Tuple (Tuple(Tuple, getTuple)) import Foreign.Storable (Storable, sizeOf, alignment, peek, poke) import Data.Orphans () instance (Storable a, Storable b) => Storable (a,b) where {-# INLINABLE sizeOf #-} sizeOf :: (a, b) -> Int sizeOf = forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.sizeOf forall a. a -> Tuple a Tuple {-# INLINABLE alignment #-} alignment :: (a, b) -> Int alignment = forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.alignment forall a. a -> Tuple a Tuple {-# INLINABLE peek #-} peek :: Ptr (a, b) -> IO (a, b) peek = forall core wrapper. Storable core => (core -> wrapper) -> Ptr wrapper -> IO wrapper Newtype.peek forall a. Tuple a -> a getTuple {-# INLINABLE poke #-} poke :: Ptr (a, b) -> (a, b) -> IO () poke = forall core wrapper. Storable core => (wrapper -> core) -> Ptr wrapper -> wrapper -> IO () Newtype.poke forall a. a -> Tuple a Tuple instance (Storable a, Storable b, Storable c) => Storable (a,b,c) where {-# INLINABLE sizeOf #-} sizeOf :: (a, b, c) -> Int sizeOf = forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.sizeOf forall a. a -> Tuple a Tuple {-# INLINABLE alignment #-} alignment :: (a, b, c) -> Int alignment = forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.alignment forall a. a -> Tuple a Tuple {-# INLINABLE peek #-} peek :: Ptr (a, b, c) -> IO (a, b, c) peek = forall core wrapper. Storable core => (core -> wrapper) -> Ptr wrapper -> IO wrapper Newtype.peek forall a. Tuple a -> a getTuple {-# INLINABLE poke #-} poke :: Ptr (a, b, c) -> (a, b, c) -> IO () poke = forall core wrapper. Storable core => (wrapper -> core) -> Ptr wrapper -> wrapper -> IO () Newtype.poke forall a. a -> Tuple a Tuple instance (Storable a, Storable b, Storable c, Storable d) => Storable (a,b,c,d) where {-# INLINABLE sizeOf #-} sizeOf :: (a, b, c, d) -> Int sizeOf = forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.sizeOf forall a. a -> Tuple a Tuple {-# INLINABLE alignment #-} alignment :: (a, b, c, d) -> Int alignment = forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.alignment forall a. a -> Tuple a Tuple {-# INLINABLE peek #-} peek :: Ptr (a, b, c, d) -> IO (a, b, c, d) peek = forall core wrapper. Storable core => (core -> wrapper) -> Ptr wrapper -> IO wrapper Newtype.peek forall a. Tuple a -> a getTuple {-# INLINABLE poke #-} poke :: Ptr (a, b, c, d) -> (a, b, c, d) -> IO () poke = forall core wrapper. Storable core => (wrapper -> core) -> Ptr wrapper -> wrapper -> IO () Newtype.poke forall a. a -> Tuple a Tuple