>>125
fn [] = [[]]
fn (x:xs) = map (x:) $ [] : fn xs

で書ける。要するに

fn [0, 1, 2, 3] = [ [0], [0,1], [0,1,2], [0,1,2,3] ]



fn [1, 2, 3] = [ [1], [1,2], [1,2,3] ]

から作る方法がわかればこの関数は素直な再帰で書けるわけ。
で、それには後者の頭に空リストを足して [ [ ], [1], [1,2], [1,2,3] ] を作り、
これの各要素の頭に 0 をくっつければいいわけだ。
この操作を一般的に書けば上の定義の2行めになる。