{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-} -- TODO: ADD Unsafe -- | Unsafe operations. NOT part of "Safe Haskell". -- -- These are "unsafe" (in the normal, Haskell sense) when used with a -- "runPar" of type `Par a -> a`. If used with a `runParIO` that -- stays in the IO monad, then they are simply dangerous. -- -- For the purposes of Safe Haskell, any module that imports this -- module becomes untrustworthy. module Control.Monad.Par.Unsafe ( ParUnsafe(..) ) where -- import Control.Monad.Par.Class -- | The class of Par monads that provide unsafe functionality. class ParUnsafe iv p | p -> iv where -- | Peek at the current contents of an 'IVar' in a nonblocking way. unsafePeek :: iv a -> p (Maybe a) -- | Attempt to put a value into an 'IVar'. If successful, return the -- value put. If something is already there, return it instead. unsafeTryPut :: iv a -> a -> p a -- | Lift an 'IO' operation into the Par monad. unsafeParIO :: IO a -> p a -- Aside: -- If the need ever arises we could also consider unsafeMultiplePut that -- would be able to change the current value of an IVar. It could -- cause big problems in the distributed case, however.