On Mon, May 16, 2005 at 03:20:25PM -0400, S. Alexander Jacobson wrote: > I don't think that is right. concatMap has definition > > concatMap :: (a -> [b]) -> [a] -> [b] > concatMap f xs = concat $ map f xs > > Therefore: > > msumMap :: (MonadPlus m) => (a1 -> m a) -> [a1] -> m a > msumMap f list = msum $ fmap f list > > In contrast <<= has type > > (=<<) :: (Monad m) => (a -> m b) -> m a -> m b
However: Prelude Control.Monad> concatMap (\i -> [i,i]) [1,2,3] [1,1,2,2,3,3] Prelude Control.Monad> (=<<) (\i -> [i,i]) [1,2,3] [1,1,2,2,3,3] You could define concatMap as =<< concatMap :: (a -> [b]) -> [a] -> [b] concatMap = (=<<) I guess you don't want it that general. (=<<) for IO doesn't resemble concatMap. Best regards Tomasz _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe