[Haskell-cafe] Data.Sequence and replicateM

Gershom Bazerman gershomb at gmail.com
Thu Jan 24 17:41:09 CET 2013


On 1/24/13 9:31 AM, Daniel Díaz Casanueva wrote:
>
> 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.

Are you forcing the full sequence in both cases? In the former case, 
you'll get all the actions, but have a thunk containing the result of 
Seq.fromList. In the latter, you're performing the actions as you build 
the sequence, so the resultant sequence will be fully evaluated.

I imagine that this is the reason that the former seems faster to you.

--g
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130124/22ae93fd/attachment.htm>


More information about the Haskell-Cafe mailing list