Il semble que vous le lisiez à tort. Regardez le type de f2(Try[T] => Try[S]):Unit
. Ensuite, en regardant f1, nous avons f: T => S
.
La position _
en position de valeur est f2(g => g map f)
.
Voyons voir ce que nous savons à ce jour:
f2(Try[T] => Try[S]):Unit
f: T => S
f2(g => g map f)
Donnez 1. et 3. nous pouvons en déduire que le type de g
doit être Try[T]
. carte sur Try[T]
prend T => Something
, dans le cas f
qui est T => S
, auquel cas Quelque chose est S
.
Il peut sembler un peu difficile à lire maintenant, mais une fois que vous apprenez à faire la distinction entre le type et la position de valeur, ce type de code devient trivial.
Une autre chose à noter def f2(f: Try[T] => Try[S]): Unit = {}
est assez inintéressant et peut être un peu préjudiciable à la résolution de votre question particulière.
Je voudrais essayer de résoudre ceci comme ça: d'abord, oubliez la classe que vous avez créée. Maintenant, mettre en œuvre cette (remplacer le ???
avec une mise en œuvre utile):
object P1 {
def fmap[A, B](A => B): Try[A] => Try[B] = ???
}
Pour les points bonus utilisent le _
comme premier caractère dans votre mise en œuvre.