2017-05-04 1 views
0

Ich habe folgendes Beispiel Funktors:Warum die Art nicht lösen kann

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))(_ + _) 

Der Compiler beschwert auf letzte Zeile:

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))(_ + _) 
            ^

Was mache ich falsch?

+0

die 'map' Definition nimmt eine Funktion von A nach B, Sie verwenden eine Teilfunktion mit zwei Parametern, z. '(_.toString)' würde funktionieren. –

+0

Ich möchte eine Ergänzung zu ihnen selbst, zum Beispiel 1 + 1, 2 + 2 ... –

Antwort

2

_ + _ ist eine Funktion, die zwei Argumente nimmt und ihre Summe zurückgibt, das ist nicht, was map erwartet. Versuchen Sie stattdessen Folgendes:

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