That is a result of the implementation of the specific Monad instance, and that does depend on the type, as you say (but it isn't determined for sequence(_) specifically).
Nothing >>= f = Nothing Just x >>= f = f x is why a Nothing "pollutes" the sequenced lists of Maybes. If Maybe is a Monad representing computations that can fail (to produce a result), then if you sequence a bunch of such computations together, if any one computation fails, your entire computation fails. This reflects the natural behavior of the Maybe monad, where if you use "x <- maybe computation", the only way to produce that x is if the computation returned Just. In other monads, sequence will behave in the "right way" for that monad. On Sat, Oct 30, 2010 at 1:30 AM, Mark Spezzano <mark.spezz...@chariot.net.au > wrote: > Not exactly. If you use the type with Maybe Int like so: > > sequence [Just 1, Nothing, Just 2] > > then the result is Nothing. > > Whereas sequence [Just 1, Just 2, Just 3] gives > > Just [1, 2, 3] > > Why? > > I assume there's special implementations of sequence and sequence_ > depending on the type of monad used. If it's a sequence_ [putStrLn "hello", > putStrLn "goodbye"] then this prints out hello and goodbye on separate > lines. > > It seems to work differently for different types. > > Mark > > > On 30/10/2010, at 3:42 PM, Bardur Arantsson wrote: > > > On 2010-10-30 07:07, Mark Spezzano wrote: > >> Hi, > >> > >> Can somebody please explain exactly how the monad functions "sequence" > and "sequence_" are meant to work? > >> > >> I have almost every Haskell textbook, but there's surprisingly little > information in them about the two functions. > >> > >> From what I can gather, "sequence" and "sequence_" behave differently > depending on the types of the Monads that they are processing. Is this > correct? Some concrete examples would be really helpful. > >> > > > > sequence [m1,m2,m3,m4,...] = do > > x1 <- m1 > > x2 <- m2 > > x3 <- m3 > > x4 <- m4 > > ... > > return [x1,x2,x3,x4,...] > > > > sequence_ [m1,m2,m3,m4,...] = do > > m1 > > m2 > > m3 > > m4 > > ... > > return () > > > > Cheers, > > > > _______________________________________________ > > Haskell-Cafe mailing list > > Haskell-Cafe@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-cafe > > > > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe