Expanding to Satvik, the notation
[1..]
gives you an endless list of number counts.
The zip associates function allows you to combine two lists into a list of tuples
zip :: [a] -> [b] -> [(a,b)]
eg
> zip [1..] [5,6,7] [(1,5),(2,6),(3,7)]
this code associates each value in the list with its position in the list
Now
replicate :: Int -> a -> [a]
repeats the value an arbitrary number of times. Given these two components, we can create a simple function
replic xs = map (\(a,b) -> replicate ab) (zip [1..] xs)
which I would write without meaning as
replic :: [a] -> [[a]] replic = map (uncurry replicate) . zip [1..]
it does exactly what you want
> replic [5,6,7] [[5],[6,6],[7,7,7]]