Yes, you're right about the type context. I always forget that Functor is not a superclass of Monad. Anyway, the `fmap` can be done only with `Monad` in the context.
About the list fusion, I'm compiling with optimizations enabled (-O2), but I do not know how it works with fusions. Is it the optimization omitting the step of creating the list? How can I know it with certainty? On Fri, Jan 25, 2013 at 7:23 AM, Thomas Horstmeyer < [email protected]> wrote: > 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 >> [email protected] >> http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe> >> >> > ______________________________**_________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe> > -- E-mail sent by Daniel Díaz Casanueva let f x = x in x
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
