For example:
f :: (b -> c) -> (a -> b) -> c
g h
he function f takes two functions (lets call them g and h) as input-arguments, and returns a value of type c
First argument: (a -> b)
Second argument: (b -> c)
Returns: a value of type c
In order for this function definition to be true the types have to line up, like this: (a -> b) -> (b -> c)
<=equivalent to=> a -> c
and the only way for this to work is if the second argument is used as input for the first argument, like this g(h(x)), where x is of type a, is this true for all functions in Haskell? In other words is the right argument always going to be defined as the input for its left argument? And is this the general case for all composed functions in Haskell? And if so should I always read and interpret function-arguments from right to left instead of left to right?
OBS: This question is not the same question as: Why does the dot compose from right to left in haskell Because my question is more general for all functions, also I already know that a function composed of other functions is called function compositon, and I know about the dot-function etc.