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 = ((a, b) -> Tuple (a, b)) -> (a, b) -> Int forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.sizeOf (a, b) -> Tuple (a, b) forall a. a -> Tuple a Tuple {-# INLINABLE alignment #-} alignment :: (a, b) -> Int alignment = ((a, b) -> Tuple (a, b)) -> (a, b) -> Int forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.alignment (a, b) -> Tuple (a, b) forall a. a -> Tuple a Tuple {-# INLINABLE peek #-} peek :: Ptr (a, b) -> IO (a, b) peek = (Tuple (a, b) -> (a, b)) -> Ptr (a, b) -> IO (a, b) forall core wrapper. Storable core => (core -> wrapper) -> Ptr wrapper -> IO wrapper Newtype.peek Tuple (a, b) -> (a, b) forall a. Tuple a -> a getTuple {-# INLINABLE poke #-} poke :: Ptr (a, b) -> (a, b) -> IO () poke = ((a, b) -> Tuple (a, b)) -> Ptr (a, b) -> (a, b) -> IO () forall core wrapper. Storable core => (wrapper -> core) -> Ptr wrapper -> wrapper -> IO () Newtype.poke (a, b) -> Tuple (a, b) 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 = ((a, b, c) -> Tuple (a, b, c)) -> (a, b, c) -> Int forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.sizeOf (a, b, c) -> Tuple (a, b, c) forall a. a -> Tuple a Tuple {-# INLINABLE alignment #-} alignment :: (a, b, c) -> Int alignment = ((a, b, c) -> Tuple (a, b, c)) -> (a, b, c) -> Int forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.alignment (a, b, c) -> Tuple (a, b, c) forall a. a -> Tuple a Tuple {-# INLINABLE peek #-} peek :: Ptr (a, b, c) -> IO (a, b, c) peek = (Tuple (a, b, c) -> (a, b, c)) -> Ptr (a, b, c) -> IO (a, b, c) forall core wrapper. Storable core => (core -> wrapper) -> Ptr wrapper -> IO wrapper Newtype.peek Tuple (a, b, c) -> (a, b, c) forall a. Tuple a -> a getTuple {-# INLINABLE poke #-} poke :: Ptr (a, b, c) -> (a, b, c) -> IO () poke = ((a, b, c) -> Tuple (a, b, c)) -> Ptr (a, b, c) -> (a, b, c) -> IO () forall core wrapper. Storable core => (wrapper -> core) -> Ptr wrapper -> wrapper -> IO () Newtype.poke (a, b, c) -> Tuple (a, b, c) 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 = ((a, b, c, d) -> Tuple (a, b, c, d)) -> (a, b, c, d) -> Int forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.sizeOf (a, b, c, d) -> Tuple (a, b, c, d) forall a. a -> Tuple a Tuple {-# INLINABLE alignment #-} alignment :: (a, b, c, d) -> Int alignment = ((a, b, c, d) -> Tuple (a, b, c, d)) -> (a, b, c, d) -> Int forall core wrapper. Storable core => (wrapper -> core) -> wrapper -> Int Newtype.alignment (a, b, c, d) -> Tuple (a, b, c, d) forall a. a -> Tuple a Tuple {-# INLINABLE peek #-} peek :: Ptr (a, b, c, d) -> IO (a, b, c, d) peek = (Tuple (a, b, c, d) -> (a, b, c, d)) -> Ptr (a, b, c, d) -> IO (a, b, c, d) forall core wrapper. Storable core => (core -> wrapper) -> Ptr wrapper -> IO wrapper Newtype.peek Tuple (a, b, c, d) -> (a, b, c, d) forall a. Tuple a -> a getTuple {-# INLINABLE poke #-} poke :: Ptr (a, b, c, d) -> (a, b, c, d) -> IO () poke = ((a, b, c, d) -> Tuple (a, b, c, d)) -> Ptr (a, b, c, d) -> (a, b, c, d) -> IO () forall core wrapper. Storable core => (wrapper -> core) -> Ptr wrapper -> wrapper -> IO () Newtype.poke (a, b, c, d) -> Tuple (a, b, c, d) forall a. a -> Tuple a Tuple