Add strict ver. of (<$>): (<$!>) to Control.Monad
authorAlexander Berntsen <alexander@plaimi.net>
Tue, 13 May 2014 08:50:30 +0000 (10:50 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Wed, 14 May 2014 07:16:41 +0000 (09:16 +0200)
A strict (<$>) has been proposed numerous times. The first time
around[1] by Johan Tibell, and the last time around[2] by David
Luposchainsky. David's thread was able to avoid The Bikeshed Monster,
and his (<$!>) proposal received unanimous +1s all around.

This addresses #9099.

 [1]: http://www.haskell.org/pipermail/libraries/2013-November/021728.html
 [2]: http://www.haskell.org/pipermail/libraries/2014-April/022864.html

Authored-by: Alexander Berntsen <alexander@plaimi.net>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
libraries/base/Control/Monad.hs
libraries/base/changelog.md

index 19c9a87..00c1fdd 100644 (file)
@@ -74,6 +74,9 @@ module Control.Monad
 
     , ap
 
+    -- ** Strict monadic functions
+
+    , (<$!>)
     ) where
 
 import Data.Maybe
@@ -311,6 +314,18 @@ is equivalent to
 ap                :: (Monad m) => m (a -> b) -> m a -> m b
 ap                =  liftM2 id
 
+infixl 4 <$!>
+
+-- | Strict version of 'Data.Functor.<$>'.
+--
+-- /Since: 4.7.1.0/
+(<$!>) :: Monad m => (a -> b) -> m a -> m b
+{-# INLINE (<$!>) #-}
+f <$!> m = do
+  x <- m
+  let z = f x
+  z `seq` return z
+
 
 -- -----------------------------------------------------------------------------
 -- Other MonadPlus functions
index c561165..4efb121 100644 (file)
@@ -12,6 +12,8 @@
 
   * Weaken RealFloat constraints on some `Data.Complex` functions
 
+  * Add `Control.Monad.(<$!>)` as a strict version of `(<$>)`
+
 ## 4.7.0.0  *Apr 2014*
 
   * Bundled with GHC 7.8.1