Task

Create a function, compose,   whose two arguments   f   and   g,   are both functions with one argument.



The result of compose is to be a function of one argument, (lets call the argument   x),   which works like applying function    f    to the result of applying function    g    to    x.



Example

 compose(f, g) (x) = f(g(x))



Reference: Function composition

Hint: In some languages, implementing compose correctly requires creating a closure.




 
func compose(f(i : int) -> int, g(i : int) -> int) -> (int) -> int
{
    let func (i : int) -> int { f(g(i)) }
}
 
func dec(i : int) -> int { 10 * i }
 
func succ(i : int) -> int { i + 1 }
 
func main() -> int
{
    let h = compose(dec, succ);
 
    print(h(1));
 
    0
}
 