Hi Thomas,
this should be on the haskell-cafe or haskell-beginners mailing list. 
Haskell@... is mainly for announcements.


You have:
> f :: Monad m =>
>      a -> m b
> Data.Traversable.mapM :: (Monad m, Traversable t) =>
>                          (a -> m b) -> t a -> m (t b)

So, if you define g with
> g a = do Data.Traversable.mapM f a
 or in short
> g = Data.Traversable.mapM f
, then the type will be
> g :: (Monad m, Traversable t) =>
>      t a -> m (t b)
instead of
> g :: [a] -> m (Seq b)
.

Try using ghci to find these things out. It helps to get not confused with the 
types.


Besides the missing "Monad" context, g misses a generic way to convert between 
different Traversables, which does not exist. You can only convert from any 
Traversable (imagine a Tree) "toList"; not all Traversables have a "fromList" 
function.
For conversion, you might want to use Foldable and Monoid, fold to untangle and 
mappend to recombine; but any specific "fromList" function will surely  be more 
efficient.

Regards
- Marc



-------- Original-Nachricht --------
> Datum: Wed, 28 Sep 2011 17:27:58 -0600
> Von: thomas burt <[email protected]>
> An: [email protected]
> Betreff: [Haskell] mapM with Traversables

> Hi -
> 
> I have a function, "f :: Monad m => a -> m b", as well as a list of a's.
> I'd
> like to produce a sequence (Data.Sequence) of b's, given the a's:
> 
> g :: [a] -> m (Seq b)
> g a = do Data.Traversable.mapM f a   -- type error!
> 
> I see that "Data.Traversable.mapM f a" doesn't work... is this like asking
> the compiler to infer the cons/append operation from the type signature of
> g?
> 
> Do I need to write my own function that explicitly calls the "append"
> functions from Data.Sequence or can I do something else that would work
> for
> any "g :: Traversable t, Traversable u => t a -> m (u b)" given "f :: a ->
> m
> b"?
> 
> Thanks for any comments!
> Thomas

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to