diff --git a/libraries/base/Control/Concurrent.hs b/libraries/base/Control/Concurrent.hs index e5a0ebfe20f6156154f7ab4f1ff9f29b068f34fe..9ab209e5d5f9075dc0fb9ee4803e9661baf65917 100644 --- a/libraries/base/Control/Concurrent.hs +++ b/libraries/base/Control/Concurrent.hs @@ -119,7 +119,6 @@ import GHC.Base import System.Posix.Types ( Fd ) import Foreign.StablePtr import Foreign.C.Types -import Control.Monad #ifdef mingw32_HOST_OS import Foreign.C diff --git a/libraries/base/Control/Monad.hs b/libraries/base/Control/Monad.hs index 089e996f47299d5fb425363d38382ce347a7a38f..698d620800b0e90cb1f3cdcb99d9e59c43540f98 100644 --- a/libraries/base/Control/Monad.hs +++ b/libraries/base/Control/Monad.hs @@ -303,22 +303,7 @@ replicateM_ :: (Monad m) => Int -> m a -> m () {-# SPECIALISE replicateM_ :: Int -> Maybe a -> Maybe () #-} replicateM_ n x = sequence_ (replicate n x) -{- | Conditional execution of monadic expressions. For example, - -> when debug (putStr "Debugging\n") - -will output the string @Debugging\\n@ if the Boolean value @debug@ is 'True', -and otherwise do nothing. --} - -when :: (Monad m) => Bool -> m () -> m () -{-# INLINEABLE when #-} -{-# SPECIALISE when :: Bool -> IO () -> IO () #-} -{-# SPECIALISE when :: Bool -> Maybe () -> Maybe () #-} -when p s = if p then s else return () - -- | The reverse of 'when'. - unless :: (Monad m) => Bool -> m () -> m () {-# INLINEABLE unless #-} {-# SPECIALISE unless :: Bool -> IO () -> IO () #-} diff --git a/libraries/base/Data/Data.hs b/libraries/base/Data/Data.hs index 8407c6f1ba180eb1493a5ed7bd650c33e5389891..c6ee6f0f040ff1e3ead31d7d7f4260173bb09476 100644 --- a/libraries/base/Data/Data.hs +++ b/libraries/base/Data/Data.hs @@ -107,7 +107,7 @@ module Data.Data ( ------------------------------------------------------------------------------ -import Control.Monad +import Control.Monad ( MonadPlus(..) ) import Data.Either import Data.Eq import Data.Maybe diff --git a/libraries/base/Data/Functor.hs b/libraries/base/Data/Functor.hs index f769d52446cf34c67ff4e5b93010e8a49bb6b398..00cc254a8bf0d66a7ea9c821ef53262c2a7cc971 100644 --- a/libraries/base/Data/Functor.hs +++ b/libraries/base/Data/Functor.hs @@ -23,7 +23,7 @@ module Data.Functor void, ) where -import Control.Monad +import Control.Monad ( void ) import GHC.Base ( Functor(..), flip ) infixl 4 <$> diff --git a/libraries/base/Data/Traversable.hs b/libraries/base/Data/Traversable.hs index 19e9d477e6ce37709811bb547f1d29a1b622ff84..227b6ba038a3856d1cbc05a8a0400d7763e8ad8f 100644 --- a/libraries/base/Data/Traversable.hs +++ b/libraries/base/Data/Traversable.hs @@ -52,7 +52,6 @@ module Data.Traversable ( ) where import Control.Applicative -import Control.Monad ( Monad(..) ) import qualified Control.Monad import Data.Either import Data.Foldable ( Foldable ) @@ -62,7 +61,7 @@ import Data.Monoid ( Monoid ) import Data.Proxy import GHC.Arr -import GHC.Base ( ($), (.), id, flip ) +import GHC.Base ( ($), (.), Monad(..), id, flip ) import qualified GHC.List as List -- | Functors representing data structures that can be traversed from diff --git a/libraries/base/Data/Version.hs b/libraries/base/Data/Version.hs index adc0f125b563730db7ddfa1e27b53052f01af8d3..60b85cdf293583fda77a6a2c4088c9440b7ce3f6 100644 --- a/libraries/base/Data/Version.hs +++ b/libraries/base/Data/Version.hs @@ -34,13 +34,12 @@ module Data.Version ( showVersion, parseVersion, ) where -import Control.Monad ( Monad(..), liftM ) import Data.Char ( isDigit, isAlphaNum ) import Data.Eq import Data.List import Data.Ord import Data.Typeable ( Typeable ) -import GHC.Base ( ($), (&&), String, Int ) +import GHC.Base ( ($), (&&), Monad(..), String, Int, liftM ) import GHC.Read import GHC.Show import Text.ParserCombinators.ReadP diff --git a/libraries/base/Debug/Trace.hs b/libraries/base/Debug/Trace.hs index 9705e29fdc1f0557ac4b7893baadd9355bad09e8..ddb19a077d69bd8b99f1c84f93f83624d967abe5 100644 --- a/libraries/base/Debug/Trace.hs +++ b/libraries/base/Debug/Trace.hs @@ -45,7 +45,6 @@ module Debug.Trace ( ) where import System.IO.Unsafe -import Control.Monad import Foreign.C.String import GHC.Base diff --git a/libraries/base/Foreign/C/Error.hs b/libraries/base/Foreign/C/Error.hs index dbc0b3ec56631460c99974b81730f3a2a7ed138c..b4dddff782a13ea94bf9a1384e4b514bc36a3b18 100644 --- a/libraries/base/Foreign/C/Error.hs +++ b/libraries/base/Foreign/C/Error.hs @@ -93,7 +93,7 @@ module Foreign.C.Error ( import Foreign.Ptr import Foreign.C.Types import Foreign.C.String -import Control.Monad ( void ) +import Data.Functor ( void ) import Data.Maybe import GHC.IO diff --git a/libraries/base/Foreign/C/String.hs b/libraries/base/Foreign/C/String.hs index cdbd241db5885a9685e8cda36deda968aa973df1..e72b620af5cfeeca90122f6d2eb5e18be78d1d4c 100644 --- a/libraries/base/Foreign/C/String.hs +++ b/libraries/base/Foreign/C/String.hs @@ -102,8 +102,6 @@ import Foreign.Storable import Data.Word -import Control.Monad - import GHC.Char import GHC.List import GHC.Real diff --git a/libraries/base/Foreign/Marshal/Pool.hs b/libraries/base/Foreign/Marshal/Pool.hs index 8dc57ae753b92d5b64dd3947a305b8b1a3510471..1488e0ff092bb46d09cc73a432d4b3464b5c1f4b 100644 --- a/libraries/base/Foreign/Marshal/Pool.hs +++ b/libraries/base/Foreign/Marshal/Pool.hs @@ -46,7 +46,7 @@ module Foreign.Marshal.Pool ( pooledNewArray0 ) where -import GHC.Base ( Int, Monad(..), (.), not ) +import GHC.Base ( Int, Monad(..), (.), liftM, not ) import GHC.Err ( undefined ) import GHC.Exception ( throw ) import GHC.IO ( IO, mask, catchAny ) @@ -54,7 +54,6 @@ import GHC.IORef ( IORef, newIORef, readIORef, writeIORef ) import GHC.List ( elem, length ) import GHC.Num ( Num(..) ) -import Control.Monad ( liftM ) import Data.List ( delete ) import Foreign.Marshal.Alloc ( mallocBytes, reallocBytes, free ) import Foreign.Marshal.Array ( pokeArray, pokeArray0 ) diff --git a/libraries/base/GHC/Base.lhs b/libraries/base/GHC/Base.lhs index 14a695745404f382df9ac7353436c61dc4c571fb..9d121bd1f7db5284f25afe5c4de5fa3b8f99411e 100644 --- a/libraries/base/GHC/Base.lhs +++ b/libraries/base/GHC/Base.lhs @@ -493,6 +493,18 @@ original default. (=<<) :: Monad m => (a -> m b) -> m a -> m b f =<< x = x >>= f +-- | Conditional execution of monadic expressions. For example, +-- +-- > when debug (putStrLn "Debugging") +-- +-- will output the string @Debugging@ if the Boolean value @debug@ +-- is 'True', and otherwise do nothing. +when :: (Monad m) => Bool -> m () -> m () +{-# INLINEABLE when #-} +{-# SPECIALISE when :: Bool -> IO () -> IO () #-} +{-# SPECIALISE when :: Bool -> Maybe () -> Maybe () #-} +when p s = if p then s else return () + -- | Promote a function to a monad. liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r liftM f m1 = do { x1 <- m1; return (f x1) } diff --git a/libraries/base/GHC/Event/Array.hs b/libraries/base/GHC/Event/Array.hs index 362638766956e692baee3de8b9a000a3bb084b75..f0f261e4d506f76234089e78c94abad19ef46e3e 100644 --- a/libraries/base/GHC/Event/Array.hs +++ b/libraries/base/GHC/Event/Array.hs @@ -24,7 +24,6 @@ module GHC.Event.Array , useAsPtr ) where -import Control.Monad hiding (forM_, empty) import Data.Bits ((.|.), shiftR) import Data.IORef (IORef, atomicModifyIORef', newIORef, readIORef, writeIORef) import Data.Maybe diff --git a/libraries/base/GHC/Event/Control.hs b/libraries/base/GHC/Event/Control.hs index 53a9bc86d8f77cc1c851c79a2750c4c799960d34..747a416343b897aa830fab117d04d3767be9a609 100644 --- a/libraries/base/GHC/Event/Control.hs +++ b/libraries/base/GHC/Event/Control.hs @@ -28,7 +28,6 @@ module GHC.Event.Control #include "EventConfig.h" -import Control.Monad (when) import Foreign.ForeignPtr (ForeignPtr) import GHC.Base import GHC.Conc.Signal (Signal) diff --git a/libraries/base/GHC/Event/EPoll.hsc b/libraries/base/GHC/Event/EPoll.hsc index f3d635bb5f20279d51b6c71dad6e04b751a0f0fe..748a1cee4bccb1e05ed38e507b29d900f4587799 100644 --- a/libraries/base/GHC/Event/EPoll.hsc +++ b/libraries/base/GHC/Event/EPoll.hsc @@ -38,7 +38,6 @@ available = False #include -import Control.Monad (when) import Data.Bits (Bits, FiniteBits, (.|.), (.&.)) import Data.Word (Word32) import Foreign.C.Error (eNOENT, getErrno, throwErrno, diff --git a/libraries/base/GHC/Event/IntTable.hs b/libraries/base/GHC/Event/IntTable.hs index d8cbcc0d45ebb2ea2ab0a4ead988f4a9196d6222..cb76319e86eb15fc9dc3f2a4f9b1767885b5cac1 100644 --- a/libraries/base/GHC/Event/IntTable.hs +++ b/libraries/base/GHC/Event/IntTable.hs @@ -12,13 +12,12 @@ module GHC.Event.IntTable , updateWith ) where -import Control.Monad ((=<<), liftM, unless, when) import Data.Bits ((.&.), shiftL, shiftR) import Data.IORef (IORef, newIORef, readIORef, writeIORef) -import Data.Maybe (Maybe(..), isJust) +import Data.Maybe (Maybe(..), isJust, isNothing) import Foreign.ForeignPtr (ForeignPtr, mallocForeignPtr, withForeignPtr) import Foreign.Storable (peek, poke) -import GHC.Base (Monad(..), ($), const, otherwise) +import GHC.Base (Monad(..), (=<<), ($), const, liftM, otherwise, when) import GHC.Classes (Eq(..), Ord(..)) import GHC.Event.Arr (Arr) import GHC.Num (Num(..)) @@ -134,7 +133,7 @@ updateWith f k (IntTable ref) = do (fbv, oldVal, newBucket) <- go False `liftM` Arr.read tabArr idx when (isJust oldVal) $ do Arr.write tabArr idx newBucket - unless (isJust fbv) $ + when (isNothing fbv) $ withForeignPtr tabSize $ \ptr -> do size <- peek ptr poke ptr (size - 1) diff --git a/libraries/base/GHC/Event/Manager.hs b/libraries/base/GHC/Event/Manager.hs index b6c028a9e11ebae0a9110e5368877e915cb293ca..ea49c0d8cbd7e5bb190be11670077f2636785ea6 100644 --- a/libraries/base/GHC/Event/Manager.hs +++ b/libraries/base/GHC/Event/Manager.hs @@ -52,7 +52,7 @@ module GHC.Event.Manager import Control.Concurrent.MVar (MVar, newMVar, readMVar, putMVar, tryPutMVar, takeMVar, withMVar) import Control.Exception (onException) -import Control.Monad (forM_, when, replicateM, void) +import Control.Monad (forM_, replicateM, void) import Data.Bits ((.&.)) import Data.IORef (IORef, atomicModifyIORef', mkWeakIORef, newIORef, readIORef, writeIORef) diff --git a/libraries/base/GHC/Event/Poll.hsc b/libraries/base/GHC/Event/Poll.hsc index 686bc711dacaa345cfba9667265f1edc6044b3a0..b8f8c02aac401e12490127c0c78dc62c2fee3c31 100644 --- a/libraries/base/GHC/Event/Poll.hsc +++ b/libraries/base/GHC/Event/Poll.hsc @@ -26,7 +26,6 @@ available = False #include import Control.Concurrent.MVar (MVar, newMVar, swapMVar) -import Control.Monad (unless) import Data.Bits (Bits, FiniteBits, (.|.), (.&.)) import Data.Word import Foreign.C.Types (CInt(..), CShort(..)) @@ -93,7 +92,7 @@ poll p mtout f = do c_pollLoop ptr (fromIntegral len) (fromTimeout tout) Nothing -> c_poll_unsafe ptr (fromIntegral len) 0 - unless (n == 0) $ do + when (n /= 0) $ do A.loop a 0 $ \i e -> do let r = pfdRevents e if r /= 0 diff --git a/libraries/base/GHC/Event/Thread.hs b/libraries/base/GHC/Event/Thread.hs index 3d4dc7d40539356d99a24a113ee313475246b479..f74fb7ddc52849f2f1a7d98d4ceadd88149788ba 100644 --- a/libraries/base/GHC/Event/Thread.hs +++ b/libraries/base/GHC/Event/Thread.hs @@ -16,7 +16,7 @@ module GHC.Event.Thread ) where import Control.Exception (finally, SomeException, toException) -import Control.Monad (forM, forM_, sequence_, zipWithM, when) +import Control.Monad (forM, forM_, sequence_, zipWithM) import Data.IORef (IORef, newIORef, readIORef, writeIORef) import Data.List (zipWith3) import Data.Tuple (snd) diff --git a/libraries/base/GHC/Event/TimerManager.hs b/libraries/base/GHC/Event/TimerManager.hs index e55dddf82ad0bf922cc83c5edeab3e6d0e483095..bac4685d94f2c10dc8acb7dc0619e0157481c086 100644 --- a/libraries/base/GHC/Event/TimerManager.hs +++ b/libraries/base/GHC/Event/TimerManager.hs @@ -39,7 +39,7 @@ module GHC.Event.TimerManager -- Imports import Control.Exception (finally) -import Control.Monad (sequence_, when) +import Control.Monad (sequence_) import Data.IORef (IORef, atomicModifyIORef', mkWeakIORef, newIORef, readIORef, writeIORef) import GHC.Base diff --git a/libraries/base/GHC/Fingerprint.hs b/libraries/base/GHC/Fingerprint.hs index a7568e6bc081fd0e0e7f2482725d420e1e5979a3..ba890004fa2bc3dc71af4a8c7821b2af890312c5 100644 --- a/libraries/base/GHC/Fingerprint.hs +++ b/libraries/base/GHC/Fingerprint.hs @@ -30,7 +30,6 @@ import GHC.Show import Foreign import Foreign.C import System.IO -import Control.Monad (when) import GHC.Fingerprint.Type diff --git a/libraries/base/GHC/Foreign.hs b/libraries/base/GHC/Foreign.hs index ef64d48572577233848ba6090ffc79fafe3458b9..c4bab8c3b39dc8de1e00be4f61cac0f3a5ec2d2d 100644 --- a/libraries/base/GHC/Foreign.hs +++ b/libraries/base/GHC/Foreign.hs @@ -44,7 +44,6 @@ import Foreign.Storable import Data.Word -- Imports for the locale-encoding version of marshallers -import Control.Monad import Data.Tuple (fst) import Data.Maybe diff --git a/libraries/base/GHC/IO/FD.hs b/libraries/base/GHC/IO/FD.hs index 1783125a9081de8e1dd6ed1d23cc6ee40677b0ed..80030b2b78b24a77c649966582e5ae9666cf35a9 100644 --- a/libraries/base/GHC/IO/FD.hs +++ b/libraries/base/GHC/IO/FD.hs @@ -35,7 +35,6 @@ import GHC.Num import GHC.Real import GHC.Show import GHC.Enum -import Control.Monad import Data.Typeable import GHC.IO diff --git a/libraries/base/GHC/IO/Handle.hs b/libraries/base/GHC/IO/Handle.hs index 62196700283d5df1bca4f5b4876e806633f996be..776618121f2e4939e28a382a816e39291fbbe165 100644 --- a/libraries/base/GHC/IO/Handle.hs +++ b/libraries/base/GHC/IO/Handle.hs @@ -68,7 +68,7 @@ import GHC.Num import GHC.Real import Data.Maybe import Data.Typeable -import Control.Monad +import Control.Monad ( mapM ) -- --------------------------------------------------------------------------- -- Closing a handle diff --git a/libraries/base/GHC/IO/Handle/Internals.hs b/libraries/base/GHC/IO/Handle/Internals.hs index e53349ac3505a34b39475792019cba153c8c7bef..118b71e4692cacf9fa2adf2a3ab7f695ba372606 100644 --- a/libraries/base/GHC/IO/Handle/Internals.hs +++ b/libraries/base/GHC/IO/Handle/Internals.hs @@ -73,7 +73,6 @@ import GHC.Show import GHC.IORef import GHC.MVar import Data.Typeable -import Control.Monad import Data.Maybe import Foreign.Safe import System.Posix.Internals hiding (FD) diff --git a/libraries/base/GHC/IO/Handle/Text.hs b/libraries/base/GHC/IO/Handle/Text.hs index f182e7f3821ffb4021bd584d8a0eb76d30db6ff6..4191356959f4fb7d36b84ae8aa8e88dcf7c828be 100644 --- a/libraries/base/GHC/IO/Handle/Text.hs +++ b/libraries/base/GHC/IO/Handle/Text.hs @@ -49,7 +49,6 @@ import qualified Control.Exception as Exception import Data.Typeable import System.IO.Error import Data.Maybe -import Control.Monad import GHC.IORef import GHC.Base diff --git a/libraries/base/System/Posix/Internals.hs b/libraries/base/System/Posix/Internals.hs index 89ef6f47a7e91f9b17195f37b45c3a9a9f2d8a6b..fccd3499bd52abf96a3f7db8094df582a1c28bd1 100644 --- a/libraries/base/System/Posix/Internals.hs +++ b/libraries/base/System/Posix/Internals.hs @@ -24,9 +24,6 @@ module System.Posix.Internals where #include "HsBaseConfig.h" -#if ! (defined(mingw32_HOST_OS) || defined(__MINGW32__)) -import Control.Monad -#endif import System.Posix.Types import Foreign @@ -323,7 +320,7 @@ setNonBlockingFD fd set = do (c_fcntl_read fd const_f_getfl) let flags' | set = flags .|. o_NONBLOCK | otherwise = flags .&. complement o_NONBLOCK - unless (flags == flags') $ do + when (flags /= flags') $ do -- An error when setting O_NONBLOCK isn't fatal: on some systems -- there are certain file handles on which this will fail (eg. /dev/null -- on FreeBSD) so we throw away the return code from fcntl_write.