[Haskell-cafe] Data.Sequence and replicateM

Thomas Horstmeyer horstmey at Mathematik.Uni-Marburg.de
Fri Jan 25 13:23:10 CET 2013


Hi,

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.

Cheers,
Thomas


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.
>
> Regards,
> 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
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



More information about the Haskell-Cafe mailing list