to compose two functions, the result of the first function has to be the same type as the input of the second function