[Haskell-cafe] Data.Sequence and replicateM

Daniel Díaz Casanueva dhelta.diaz at gmail.com
Fri Jan 25 15:36:30 CET 2013


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 <
horstmey at mathematik.uni-marburg.de> 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
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe>
>>
>>
> ______________________________**_________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130125/791824a5/attachment.htm>


More information about the Haskell-Cafe mailing list