(original) (raw)

{-# LANGUAGE Unsafe #-} {-# LANGUAGE NoImplicitPrelude, MagicHash, UnboxedTuples #-} {-# OPTIONS_GHC -funbox-strict-fields #-} {-# OPTIONS_HADDOCK not-home #-}

module GHC.MVar (

      [MVar](GHC.MVar.html#MVar)(..)
    , [newMVar](GHC.MVar.html#newMVar)
    , [newEmptyMVar](GHC.MVar.html#newEmptyMVar)
    , [takeMVar](GHC.MVar.html#takeMVar)
    , [readMVar](GHC.MVar.html#readMVar)
    , [putMVar](GHC.MVar.html#putMVar)
    , [tryTakeMVar](GHC.MVar.html#tryTakeMVar)
    , [tryPutMVar](GHC.MVar.html#tryPutMVar)
    , [tryReadMVar](GHC.MVar.html#tryReadMVar)
    , [isEmptyMVar](GHC.MVar.html#isEmptyMVar)
    , [addMVarFinalizer](GHC.MVar.html#addMVarFinalizer)
) where

import GHC.Base

data MVar a = MVar (MVar# RealWorld a)

instance Eq (MVar a) where (MVar MVar# RealWorld a mvar1#) == :: MVar a -> MVar a -> Bool == (MVar MVar# RealWorld a mvar2#) = Int# -> Bool isTrue# (MVar# RealWorld a -> MVar# RealWorld a -> Int# forall s a. MVar# s a -> MVar# s a -> Int# sameMVar# MVar# RealWorld a mvar1# MVar# RealWorld a mvar2#)

newEmptyMVar :: IO (MVar a) newEmptyMVar :: forall a. IO (MVar a) newEmptyMVar = (State# RealWorld -> (# State# RealWorld, MVar a #)) -> IO (MVar a) forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, MVar a #)) -> IO (MVar a)) -> (State# RealWorld -> (# State# RealWorld, MVar a #)) -> IO (MVar a) forall a b. (a -> b) -> a -> b $ \ State# RealWorld s# -> case State# RealWorld -> (# State# RealWorld, MVar# RealWorld a #) forall d a. State# d -> (# State# d, MVar# d a #) newMVar# State# RealWorld s# of (# State# RealWorld s2#, MVar# RealWorld a svar# #) -> (# State# RealWorld s2#, MVar# RealWorld a -> MVar a forall a. MVar# RealWorld a -> MVar a MVar MVar# RealWorld a svar# #)

newMVar :: a -> IO (MVar a) newMVar :: forall a. a -> IO (MVar a) newMVar a value = IO (MVar a) forall a. IO (MVar a) newEmptyMVar IO (MVar a) -> (MVar a -> IO (MVar a)) -> IO (MVar a) forall a b. IO a -> (a -> IO b) -> IO b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \ MVar a mvar -> MVar a -> a -> IO () forall a. MVar a -> a -> IO () putMVar MVar a mvar a value IO () -> IO (MVar a) -> IO (MVar a) forall a b. IO a -> IO b -> IO b forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> MVar a -> IO (MVar a) forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return MVar a mvar

takeMVar :: MVar a -> IO a takeMVar :: forall a. MVar a -> IO a takeMVar (MVar MVar# RealWorld a mvar#) = (State# RealWorld -> (# State# RealWorld, a #)) -> IO a forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, a #)) -> IO a) -> (State# RealWorld -> (# State# RealWorld, a #)) -> IO a forall a b. (a -> b) -> a -> b $ \ State# RealWorld s# -> MVar# RealWorld a -> State# RealWorld -> (# State# RealWorld, a #) forall d a. MVar# d a -> State# d -> (# State# d, a #) takeMVar# MVar# RealWorld a mvar# State# RealWorld s#

readMVar :: MVar a -> IO a readMVar :: forall a. MVar a -> IO a readMVar (MVar MVar# RealWorld a mvar#) = (State# RealWorld -> (# State# RealWorld, a #)) -> IO a forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, a #)) -> IO a) -> (State# RealWorld -> (# State# RealWorld, a #)) -> IO a forall a b. (a -> b) -> a -> b $ \ State# RealWorld s# -> MVar# RealWorld a -> State# RealWorld -> (# State# RealWorld, a #) forall d a. MVar# d a -> State# d -> (# State# d, a #) readMVar# MVar# RealWorld a mvar# State# RealWorld s#

putMVar :: MVar a -> a -> IO () putMVar :: forall a. MVar a -> a -> IO () putMVar (MVar MVar# RealWorld a mvar#) a x = (State# RealWorld -> (# State# RealWorld, () #)) -> IO () forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, () #)) -> IO ()) -> (State# RealWorld -> (# State# RealWorld, () #)) -> IO () forall a b. (a -> b) -> a -> b $ \ State# RealWorld s# -> case MVar# RealWorld a -> a -> State# RealWorld -> State# RealWorld forall d a. MVar# d a -> a -> State# d -> State# d putMVar# MVar# RealWorld a mvar# a x State# RealWorld s# of State# RealWorld s2# -> (# State# RealWorld s2#, () #)

tryTakeMVar :: MVar a -> IO (Maybe a) tryTakeMVar :: forall a. MVar a -> IO (Maybe a) tryTakeMVar (MVar MVar# RealWorld a m) = (State# RealWorld -> (# State# RealWorld, Maybe a #)) -> IO (Maybe a) forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, Maybe a #)) -> IO (Maybe a)) -> (State# RealWorld -> (# State# RealWorld, Maybe a #)) -> IO (Maybe a) forall a b. (a -> b) -> a -> b $ \ State# RealWorld s -> case MVar# RealWorld a -> State# RealWorld -> (# State# RealWorld, Int#, a #) forall d a. MVar# d a -> State# d -> (# State# d, Int#, a #) tryTakeMVar# MVar# RealWorld a m State# RealWorld s of (# State# RealWorld s', Int# 0#, a _ #) -> (# State# RealWorld s', Maybe a forall a. Maybe a Nothing #)
(# State# RealWorld s', Int# _, a a #) -> (# State# RealWorld s', a -> Maybe a forall a. a -> Maybe a Just a a #)

tryPutMVar :: MVar a -> a -> IO Bool tryPutMVar :: forall a. MVar a -> a -> IO Bool tryPutMVar (MVar MVar# RealWorld a mvar#) a x = (State# RealWorld -> (# State# RealWorld, Bool #)) -> IO Bool forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, Bool #)) -> IO Bool) -> (State# RealWorld -> (# State# RealWorld, Bool #)) -> IO Bool forall a b. (a -> b) -> a -> b $ \ State# RealWorld s# -> case MVar# RealWorld a -> a -> State# RealWorld -> (# State# RealWorld, Int# #) forall d a. MVar# d a -> a -> State# d -> (# State# d, Int# #) tryPutMVar# MVar# RealWorld a mvar# a x State# RealWorld s# of (# State# RealWorld s, Int# 0# #) -> (# State# RealWorld s, Bool False #) (# State# RealWorld s, Int# _ #) -> (# State# RealWorld s, Bool True #)

tryReadMVar :: MVar a -> IO (Maybe a) tryReadMVar :: forall a. MVar a -> IO (Maybe a) tryReadMVar (MVar MVar# RealWorld a m) = (State# RealWorld -> (# State# RealWorld, Maybe a #)) -> IO (Maybe a) forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, Maybe a #)) -> IO (Maybe a)) -> (State# RealWorld -> (# State# RealWorld, Maybe a #)) -> IO (Maybe a) forall a b. (a -> b) -> a -> b $ \ State# RealWorld s -> case MVar# RealWorld a -> State# RealWorld -> (# State# RealWorld, Int#, a #) forall d a. MVar# d a -> State# d -> (# State# d, Int#, a #) tryReadMVar# MVar# RealWorld a m State# RealWorld s of (# State# RealWorld s', Int# 0#, a _ #) -> (# State# RealWorld s', Maybe a forall a. Maybe a Nothing #)
(# State# RealWorld s', Int# _, a a #) -> (# State# RealWorld s', a -> Maybe a forall a. a -> Maybe a Just a a #)

isEmptyMVar :: MVar a -> IO Bool isEmptyMVar :: forall a. MVar a -> IO Bool isEmptyMVar (MVar MVar# RealWorld a mv#) = (State# RealWorld -> (# State# RealWorld, Bool #)) -> IO Bool forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, Bool #)) -> IO Bool) -> (State# RealWorld -> (# State# RealWorld, Bool #)) -> IO Bool forall a b. (a -> b) -> a -> b $ \ State# RealWorld s# -> case MVar# RealWorld a -> State# RealWorld -> (# State# RealWorld, Int# #) forall d a. MVar# d a -> State# d -> (# State# d, Int# #) isEmptyMVar# MVar# RealWorld a mv# State# RealWorld s# of (# State# RealWorld s2#, Int# flg #) -> (# State# RealWorld s2#, Int# -> Bool isTrue# (Int# flg Int# -> Int# -> Int# /=# Int# 0#) #)

addMVarFinalizer :: MVar a -> IO () -> IO () addMVarFinalizer :: forall a. MVar a -> IO () -> IO () addMVarFinalizer (MVar MVar# RealWorld a m) (IO State# RealWorld -> (# State# RealWorld, () #) finalizer) = (State# RealWorld -> (# State# RealWorld, () #)) -> IO () forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, () #)) -> IO ()) -> (State# RealWorld -> (# State# RealWorld, () #)) -> IO () forall a b. (a -> b) -> a -> b $ \State# RealWorld s -> case MVar# RealWorld a -> () -> (State# RealWorld -> (# State# RealWorld, () #)) -> State# RealWorld -> (# State# RealWorld, Weak# () #) forall a b c. a -> b -> (State# RealWorld -> (# State# RealWorld, c #)) -> State# RealWorld -> (# State# RealWorld, Weak# b #) mkWeak# MVar# RealWorld a m () State# RealWorld -> (# State# RealWorld, () #) finalizer State# RealWorld s of { (# State# RealWorld s1, Weak# () _ #) -> (# State# RealWorld s1, () #) }