{-# LANGUAGE CPP
  #-}

-- | Atomic compare and swap for IORefs and STRefs.
module Data.CAS 
 ( 
  -- Not currently provided by Fake.hs:
  -- casSTRef, 
   casIORef, ptrEq,
   atomicModifyIORefCAS, atomicModifyIORefCAS_,

   -- * Generic interface: for interoperation with `Fake` and `Foreign` alternative libraries.
   CASRef)
where

#if __GLASGOW_HASKELL__ <= 702  /* Fix to casMutVar introduced 2011.12.09 */
#warning "casMutVar is not included or is bugged in your GHC, falling back to Fake version."
import Data.CAS.Internal.Fake
#else
import Data.CAS.Internal.Native
#endif