#if sh_SAFE_DEFAULT
{-# LANGUAGE Trustworthy #-}
#endif
{-# LANGUAGE NoImplicitPrelude #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Foreign
-- Copyright   :  (c) The FFI task force 2001
-- License     :  BSD-style (see the file libraries/base/LICENSE)
-- 
-- Maintainer  :  [email protected]
-- Stability   :  provisional
-- Portability :  portable
--
-- A collection of data types, classes, and functions for interfacing
-- with another programming language.
--
-----------------------------------------------------------------------------

module Foreign
        ( module Data.Bits
        , module Data.Int
        , module Data.Word
        , module Foreign.Ptr
        , module Foreign.ForeignPtr
        , module Foreign.StablePtr
        , module Foreign.Storable
        , module Foreign.Marshal

#if !sh_SAFE_DEFAULT
        -- * Unsafe Functions

        -- | 'unsafePerformIO' is exported here for backwards
        -- compatibility reasons only.  For doing local marshalling in
        -- the FFI, use 'unsafeLocalState'.  For other uses, see
        -- 'System.IO.Unsafe.unsafePerformIO'.
        , unsafePerformIO
#endif
        ) where

import Data.Bits
import Data.Int
import Data.Word
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.StablePtr
import Foreign.Storable
import Foreign.Marshal

#if !sh_SAFE_DEFAULT
import GHC.IO (IO)
import qualified System.IO.Unsafe (unsafePerformIO)

{-# DEPRECATED unsafePerformIO "Use System.IO.Unsafe.unsafePerformIO instead; This function will be removed in the next release" #-}

{-# INLINE unsafePerformIO #-}
unsafePerformIO :: IO a -> a
unsafePerformIO = System.IO.Unsafe.unsafePerformIO
#endif