omposição de funções de métodos, funções e funções parcialmente aplicadas no Scala

Algo semelhante a Stack Overflow questionCompose e andThen métodos, Eu tenho trabalhado através do TwitterScala School tutorial e rapidamente encontrei o mesmo problema que um comentarista tinha (o que foi ótimo, porque fui para a cama pensando que meu problema estava resolvido

No tutorial, ele define dois métodos como tais:

def addUmm(x: String) = x + " umm"
def addAhem(x: String) = x + " ahem"

e enquanto estiver nas versões mais recentes do Scala, você não pode chamar de composição nelas da seguinte forma:addUmm(_).compose(addAhem(_)), a resposta aceita (e algumas das outras respostas parecem depender do fato de queaddUmm eaddAhem são métodos, não funções, que cria um problema ao tentar chamar de composição. Fui para a cama satisfeito, tendo executado com sucesso:

scala> ((s: String) => s + " umm").compose((s: String) => s + " ahem")
res0: String => java.lang.String = <function1>

Legal. O problema é que, embora não seja capaz de compor métodos, faz algum sentido, quando eu faço a mesma coisa com valores que sei avaliar paraFunction1:

val a = (s: String) => s + " umm"
val b = (s: String) => s + " ahem"
val c = a(_).compose(b(_))

Bem, essa última linha tosse com o mesmo erro que a pergunta original, mesmo sendo aplicações parciais de funções, não métodos. Uma das respostas da pergunta original (altamente classificada, mas não a resposta aceita) parece sugerir que tem a ver com a forma como a aplicação parcial é expandida, qual é a explicação?

Para um novato no Scala, o fato de o inferenciador obtera(_).compose(b(_)) errado, não importa se você especificar explicitamente_: String nos dois lugares, masa.compose(b) faz é um pouco confus

questionAnswers(2)

yourAnswerToTheQuestion