[Haskell-cafe] Data.Sequence and replicateM
horstmey at Mathematik.Uni-Marburg.de
Fri Jan 25 13:23:10 CET 2013
isn't the correct type context for f the following?
f :: (Functor m, Monad m) => Int -> m a -> m (Seq a)
So your f really is a kind of specialization of g.
Could the reason for f performing better be list fusion? Anything
happening inside Control.Monad.replicateM should be subject to it.
Am 24.01.2013 15:31, schrieb Daniel Díaz Casanueva:
> Hi Cafe,
> I was coding this morning when I suddenly found something that surprised
> me. It's been a short time since I am really caring about the
> performance of my programs. Before, I was just caring about their
> correctness. So I am trying different things and profiling to see
> differences. One difference I have found surprising is that the function
> f is MUCH faster and less space consuming than the function g:
> import Control.Monad
> import qualified Data.Sequence as Seq
> type Seq = Seq.Seq
> f :: Monad m => Int -> m a -> m (Seq a)
> f n = fmap Seq.fromList . replicateM n
> g :: Monad m => Int -> m a -> m (Seq a)
> g = Seq.replicateM
> Maybe is just in my test case, where the Int argument is big and the
> monadic action short, but it looks to me that Data.Sequence.replicateM
> can be faster than it is right now.
> Daniel Díaz.
> E-mail sent by Daniel Díaz Casanueva
> let f x = x in x
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe