2013-03-17 20 views

Odpowiedz

15

Jeśli spojrzeć na poniższym Ordering.on metody standardowej biblioteki:

def on[U](f: U => T): Ordering[U] 

Zobaczysz, że on przekształca Ordering[T] się z Ordering[U] biorąc funkcję od U do T. Dlatego metoda on świadków fakt Ordering może być postrzegane jako Contravariant funktora z:

def contramap[A, B](f: B => A) = (fa: Ordering[A]) => fa.on(f) 

Widziałem też blogu z Tonym i to pomogło mi w końcu sens tego trzylatka answer z retronim jednego mojego pytania.

+0

Dzięki. Całkiem proste, gdy już to zobaczysz. – Bradford

16

Załóżmy, że masz klasę Conversion[X,Y] reprezentującą konwersję z wartości typu X na wartość typu Y. Można go połączyć z funkcją ?=>X, aby wstępnie przetworzyć dane wejściowe lub z funkcją Y=>?, aby przetworzyć dane wyjściowe. Na przykład:

trait Conversion[X,Y] { self=> 

    def apply(x: X): Y 

    def map[Z](f: Y=>Z) = new Conversion[X,Z] { 
    def apply(x:X): Z = f(self.apply(x)) 
    } 

    def contramap[W](f: W=>X) = new Conversion[W,Y] { 
    def apply(w: W): Y = self.apply(f(w)) 
    } 

} 
+0

Czy masz na myśli "od wartości typu" X "do wartości typu" Y "? – huynhjl

+0

@huynhjl Dzięki. Naprawiłem literówkę. – paradigmatic

Powiązane problemy