The paper I am reading uses the following in an instance declaration for parsers: p >>= f = Parser (\cs -> concat [parse (f a) cs' | (a,cs') <- parse p cs]) Isn't this the same as p >>= f = Parser (\cs -> [(a',cs'') | (a,cs') <- parse p cs, (a',cs'') <- parse (f a) cs']) ? If so, any guesses why they chose the more obscure form?