[Haskell-beginners] Does this function already exist in one of the standard modules?

Daniel Fischer daniel.is.fischer at web.de
Sat Aug 8 16:54:15 EDT 2009


Am Samstag 08 August 2009 22:01:34 schrieb I. J. Kennedy:
> Does this function already exist in one of the standard modules?
> It computes  f(f(f(...f(x))).  I suspect it is a common function, but I
> can't find it, even using Hoogle.
>
>   applyMany :: Int -> (a -> a) -> a -> a
>   applyMany 0 f x = x
>   applyMany n f x = applyMany (n-1) f (f x)

Not directly, I think.
But we have 

iterate :: (a -> a) -> a -> [a]
iterate f x = x:iterate f (f x)

so applyMany n f x = iterate f x !! n

Most of the time you either need different numbers of iterations for the same starting 
value, then iterate is what you want, or the same number of iterations for different 
values, then you use something like

let g = foldl (.) id (replicate n f) in ...



More information about the Beginners mailing list