2017-05-04 4 views
0

je suit foncteur exemple:Pourquoi ne peut pas résoudre le type

trait Functor[F[_]] { 
    def map[A, B](fa: F[A])(f: A => B): F[B] 
} 

object Functor { 
    implicit val listFunctor: Functor[List] = new Functor[List] { 
    def map[A, B](fa: List[A])(f: (A) => B): List[B] = fa.map(f) 
    } 
} 

Functor.listFunctor.map(List(1,2,3,4))(_ + _) 

Le compilateur Plaindre sur la dernière ligne:

Error:(29, 47) missing parameter type for expanded function ((x$1: <error>, x$2) => x$1.$plus(x$2)) 
Functor.listFunctor.map(List(1,2,3,4))(_ + _) 
            ^

Qu'est-ce que je fais mal?

+0

La définition 'map' prend une fonction de A à B, vous utilisez une fonction partielle avec deux paramètres, par ex. '(_.toString)' fonctionnerait. –

+0

Je veux faire un ajout à eux-mêmes, par exemple 1 + 1, 2 + 2 ... –

Répondre

2

_ + _ est une fonction prenant deux arguments et retournant leur somme, ce n'est pas ce que map attend. Essayez plutôt ce qui suit:

Functor.listFunctor.map(List(1,2,3,4))(i => i + i)