[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:
> 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
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
E-mail sent by Daniel Díaz Casanueva
let f x = x in x
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe