ならない

do let !i' = concat l; return ()

concat l `seq` return ()
と等価だけど、seqは左辺を最上位の構築子が明示される形(WHNH)までしか簡約しない。この例だと、
concat (take 1000 (repeat (take 1000 $ repeat 1)))

1 : 何か
まで評価したらそこで終わってしまう