>>71 > f n xs = filter ((==n).length) [take n x | x <- tails xs]
でも素直でわかりやすい。同じだけど:
f n xs = filter ((==n).length) $ map (take n) $ tails xs
「関数のn乗」って関数はなかったんでしたっけ:
f n xs = (iterate chop $ map (take n) $ tails xs) !! n chop (x:xs) = if null xs then [] else x : chop xs
f n xs = map (take n) $ chopn n $ tails xs chopn n xs = fst $ foldr _chopn ([], n) xs where _chopn x (xs, n) = if n > 0 then (xs, n - 1) else (x:xs, 0)