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.




using System;
using System.Console;
using System.Math;
 
module Composition
{
    Compose[T](f : T -> T, g : T -> T, x : T) : T
    {
        f(g(x))
    }
 
    Main() : void
    {
        def SinAsin = Compose(Sin, Asin, _);
        WriteLine(SinAsin(0.5));
    }
}