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.




 
function compose<T, U, V> (fn1: (input: T) => U, fn2: (input: U) => V){
    return function(value: T) {
        return fn2(fn1(value))
    } 
}
 
function size (s: string): number { return s.length; }
 
function isEven(x: number): boolean { return x % 2 === 0; }
 
const evenSize = compose(size, isEven);
 
console.log(evenSize("ABCD")) // true
console.log(evenSize("ABC")) // false
 