リストのリストにsequenceを適用すると直積が得られる。
$ ghci Prelude> sequence [[1,2,3], [4,5,6]] [[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]] Prelude> sequence ["abc", "def"] ["ad","ae","af","bd","be","bf","cd","ce","cf"]
だからこうすると、2進数(の文字列)のリストが作れる。
Prelude> sequence $ replicate 4 "01" ["0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"]
どうしてこうなるのかは、ゆっくり考えます。
id:nobsunさんや[1..100]>>=penさんが解説してくれるかも…と密かに期待しているのは秘密です。