import Control.Monad repli :: [a] -> [a] repli xs n = concatMap (replicate n) xs repli' = flip $ concatMap . replicate repli'' xs n = xs >>= replicate n repli''' [] _ = [] repli''' (x:xs) n = foldr (const (x:)) (repli xs n) [1..n]