すみません質問なのですが、文献で
[0, 1, 2, 3]を[[0],[0,1],[0,1,2]にしてくれる
便利な関数があったのですが

fn :: [a] -> [[a]]
fn [] = []
fn (x:xs) = [x] : map f (fn xs)
where f lt = x : lt

リストにmapを掛けてconsしてまた再帰呼出など
初心者の自分には仕組みが今一つ掴めないです。
もっと簡単に理解できて同様の事ができる関数は
ありえますでしょうか?