Is there a library function available in Haskell to compose a function with itself n times?
For example I have this function:
func :: a -> a
and I want to do this:
func . func . func . func . func . func , ...
(up to n times, where n is only known at runtime).
Note that the iterate function would not be appropriate for what I am doing, since I do not care about any intermediate results.
Composing a Function with Itself To compose a function with itself, we simply input a function into itself using the definition of composition of functions. In other words, to compose a function, f(x) , with itself, we compute f(f(x)) f ( f ( x ) ) or (f∘f)(x) ( f ∘ f ) ( x ) .
The iterate
solution is fine, or you might like this one: the composition of n
copies of f
is foldr (.) id (replicate n f)
.
\xs n -> iterate func xs !! n
(xs
is the initial value, n
is the number of times to apply func
)
I don't know why, but I feel like iterate
is something people aren't consistently exposed to when learning Haskell.
If you don't like !!
then you could use zip
and lookup
as an alternative. (some people/groups/tools don't like functions that call "error" in certain cases, I'm not claiming lookup is any better in these cases)
lookup n . zip [0..] . iterate func
EDIT: Ok, so I deleted then undeleted because I agree with the other answerer - you shouldn't discount use of iterate just because it gives you more than you need.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With