-- | This primarily exports the CStorable typeclass, which may have its
-- methods automatically defaulted if it has a Generic instance.
-- Then, this instance can be transfered via the `Storable' constructor.
module Foreign.CStorable
(CStorable(..),
StorableWrap(..)
) where
import Foreign.CStorable.TypeClass
import Foreign.CStorable.BaseInstances
import Foreign.Storable
import Foreign.Ptr
-- | Applying the `Storable' constructor to something which is Storable
-- gives it a corresponding CStorable instance.
newtype StorableWrap a = Storable a
-- | Translates a Storable instance to a CStorable instance
instance (Storable a) => CStorable (StorableWrap a) where
cPeek p = fmap Storable $ peek (castPtr p)
cPoke p (Storable x) = poke (castPtr p) x
cAlignment (Storable x) = alignment x
cSizeOf (Storable x) = sizeOf x