Why does application of `sequence` on List of Lists lead to computation of its Cartesian Product?

This works because using lists as monads in Haskell makes them model indeterminism. Consider:

sequence [[1,2],[3,4]]

By definition this is the same as:

do x <- [1,2]
   y <- [3,4]
   return [x,y]

Just read it as “First a choice between 1 and 2, then a choice between 3 and 4”. The list monad will now accumulate all possible outcomes – hence the answer [[1,3],[1,4],[2,3],[2,4]].

(for an even more obfuscated example, see here)

Leave a Comment

tech