@@ -27,6 +27,7 @@ import Control.Monad (when)
27import Control.Monad.IO.Class (MonadIO(..))
27import Control.Monad.IO.Class (MonadIO(..))
28import Control.Monad.State.Strict (StateT, get, put, MonadState)
28import Control.Monad.State.Strict (StateT, get, put, MonadState)
29import qualified Control.Monad.State.Strict as State
29import qualified Control.Monad.State.Strict as State
30+import Control.Monad.Trans.Class (lift)
30import Data.Functor.Identity (Identity, runIdentity)
31import Data.Functor.Identity (Identity, runIdentity)
31import Data.IORef (newIORef, modifyIORef')
32import Data.IORef (newIORef, modifyIORef')
32import GHC.Generics (Generic)
33import GHC.Generics (Generic)
@@ -1610,8 +1611,11 @@ o_1_space_concat value = sqrtVal `seq`
1611o_1_space_applicative :: Int -> [Benchmark]
1612o_1_space_applicative :: Int -> [Benchmark]
1612o_1_space_applicative value =
1613o_1_space_applicative value =
1613− [ bgroup "applicative"
1614+ [ bgroup "Applicative"
1615+ [ benchIO "(*>) (sqrt n x sqrt n)" $ apDiscardFst value serially
1616+ , benchIO "(<*) (sqrt n x sqrt n)" $ apDiscardSnd value serially
1614− [ benchIO "outer product (sqrt n x sqrt n)" $ toNullAp value serially
1617+ , benchIO "(<*>) (sqrt n x sqrt n)" $ toNullAp value serially
1618+ , benchIO "liftA2 (sqrt n x sqrt n)" $ apLiftA2 value serially
@@ -1636,16 +1640,17 @@ o_n_space_applicative value =
1636o_1_space_monad :: Int -> [Benchmark]
1640o_1_space_monad :: Int -> [Benchmark]
1637o_1_space_monad value =
1641o_1_space_monad value =
1638 [ bgroup "Monad"
1642 [ bgroup "Monad"
1643+ [ benchIO "(>>) (sqrt n x sqrt n)" $ monadThen value serially
1639− [ benchIO "outer product (sqrt n x sqrt n)" $ toNullM value serially
1644+ , benchIO "(>>=) (sqrt n x sqrt n)" $ toNullM value serially
1640− , benchIO "outer product (sqrt n x sqrt n) (filterAllOut)" $
1645+ , benchIO "(>>=) (sqrt n x sqrt n) (filterAllOut)" $
1641 filterAllOutM value serially
1646 filterAllOutM value serially
1642− , benchIO "outer product (sqrt n x sqrt n) (filterAllIn)" $
1647+ , benchIO "(>>=) (sqrt n x sqrt n) (filterAllIn)" $
1643 filterAllInM value serially
1648 filterAllInM value serially
1644− , benchIO "outer product (sqrt n x sqrt n) (filterSome)" $
1649+ , benchIO "(>>=) (sqrt n x sqrt n) (filterSome)" $
1645 filterSome value serially
1650 filterSome value serially
1646− , benchIO "outer product (sqrt n x sqrt n) (breakAfterSome)" $
1651+ , benchIO "(>>=) (sqrt n x sqrt n) (breakAfterSome)" $
1647 breakAfterSome value serially
1652 breakAfterSome value serially
1648− , benchIO "outer product (cubert n x cubert n x cubert n)" $
1653+ , benchIO "(>>=) (cubert n x cubert n x cubert n)" $
1649 toNullM3 value serially
1654 toNullM3 value serially
@@ -1657,9 +1662,9 @@ o_n_space_monad value =
1657 iterateSingleton ((>>) . pure) value
1662 iterateSingleton ((>>) . pure) value
1658 , benchIOSrc serially "(>>=) (n times)" $
1663 , benchIOSrc serially "(>>=) (n times)" $
1659 iterateSingleton (\x xs -> xs >>= \y -> return (x + y)) value
1664 iterateSingleton (\x xs -> xs >>= \y -> return (x + y)) value
1660− , benchIO "outer product (sqrt n x sqrt n) (toList)" $
1665+ , benchIO "(>>=) (sqrt n x sqrt n) (toList)" $
1661 toListM value serially
1666 toListM value serially
1662− , benchIO "outer product (sqrt n x sqrt n) (toListSome)" $
1667+ , benchIO "(>>=) (sqrt n x sqrt n) (toListSome)" $
1663 toListSome value serially
1668 toListSome value serially
@@ -1714,10 +1719,10 @@ iterateStateIO n = do
1714{-# INLINE iterateStateT #-}
1719{-# INLINE iterateStateT #-}
1715iterateStateT :: Int -> SerialT (StateT Int IO) Int
1720iterateStateT :: Int -> SerialT (StateT Int IO) Int
1716iterateStateT n = do
1721iterateStateT n = do
1717− x <- get
1722+ x <- lift get
1718 if x > n
1723 if x > n
1720− put (x - 1)
1725+ lift $ put (x - 1)
1721 iterateStateT n
1726 iterateStateT n
1722 else return x
1727 else return x
@@ -1734,8 +1739,8 @@ iterateState n = do
1734 iterateState n
1739 iterateState n
1735 else return x
1740 else return x
1737−o_n_space_transformer :: Int -> [Benchmark]
1742+o_n_heap_transformer :: Int -> [Benchmark]
1738−o_n_space_transformer value =
1743+o_n_heap_transformer value =
1739 [ bgroup "transformer"
1744 [ bgroup "transformer"
1740 [ benchIO "StateT Int IO (n times) (baseline)" $ \n ->
1745 [ benchIO "StateT Int IO (n times) (baseline)" $ \n ->
1741 State.evalStateT (iterateStateIO n) value
1746 State.evalStateT (iterateStateIO n) value
@@ -1805,6 +1810,7 @@ main = do
1806 -- transformation
1811 -- transformation
1807 , o_n_heap_reordering size
1812 , o_n_heap_reordering size
1813+ , o_n_heap_transformer size
1809 , bgroup (o_n_space_prefix moduleName) $ Prelude.concat
1815 , bgroup (o_n_space_prefix moduleName) $ Prelude.concat
1810 [ o_n_space_elimination_foldable size
1816 [ o_n_space_elimination_foldable size
@@ -1819,6 +1825,5 @@ main = do
1819 , o_n_space_functor size
1825 , o_n_space_functor size
1820 , o_n_space_applicative size
1826 , o_n_space_applicative size
1821 , o_n_space_monad size
1827 , o_n_space_monad size
1822− , o_n_space_transformer size