Por que Haskell não aceita argumentos após uma composição de função?
Como as funções Haskell têm apenas um argumento, onde o restante dos argumentos permanece como lambdas, podemos fazer o seguinte:
foo a b = a + b -- this is like foo a = \b -> a + b
foo 1 2 -- ok
Bem, notei que se eu declarar a função retornando um lambda, assim como no comentário, ofoo 1 2
vai funcionar bem da mesma maneira.
Mas quando eu componho essas funções, assim:
foo a b = a + b
bar x = x * x
bar . foo 1 2 -- oh, it's wrong, I need do '(bar . foo 1) 2'
... Isso retorna um erro.
Ok, a pergunta é: por que retornar um lambda da função não funciona como a composição da função? Quero dizer, na composição, preciso colocar parênteses ao redor do primeiro, e nenhum parênteses é necessário quando um lambda é retornado da função.