    {-# LANGUAGE CPP, NoImplicitPrelude #-}
    {-# LANGUAGE MagicHash #-}
    module Foreign.ForeignPtr.Compat (
      module Base
    , plusForeignPtr
    ) where

    import Foreign.ForeignPtr as Base

    #if !(MIN_VERSION_base(4,10,0))
    import GHC.Exts (Int(..), plusAddr#)
    import GHC.ForeignPtr (ForeignPtr(..))

    plusForeignPtr :: ForeignPtr a -> Int -> ForeignPtr b
    -- ^Advances the given address by the given offset in bytes.
    --
    -- The new 'ForeignPtr' shares the finalizer of the original,
    -- equivalent from a finalization standpoint to just creating another
    -- reference to the original. That is, the finalizer will not be
    -- called before the new 'ForeignPtr' is unreachable, nor will it be
    -- called an additional time due to this call, and the finalizer will
    -- be called with the same address that it would have had this call
    -- not happened, *not* the new address.
    --
    -- /Since: 4.10.0.0/
    plusForeignPtr (ForeignPtr addr c) (I# d) = ForeignPtr (plusAddr# addr d) c
    #endif