2012-04-10 5 views
24

Mam następującą definicję klasy Scala (znaleziono w papierze), modelowanie Kategorie:Scala ~> (tylda większe niż) operatora

trait Category[~>[_, _]] { 
    def compose[A, B, C] 
    (f: B ~> C) 
    (g: A ~> B) 
    : A ~> C 
    def id[A]: A ~> A 
} 

może ktoś mi wyjaśnić, co „~>” oznacza w kategorii typ parametru i typ zwracany przez metodę? lub skierować mnie do zasobu, który wyjaśnia to ... Jestem nowy w Scala (pochodzące od Java), więc wybacz mi, jeśli to coś scala użytkownik powinien wiedzieć ... góry dziękuję

Odpowiedz

26

~> jest po prostu nazwą zastępczą dla parametru typu Category. Podobnie jak T w class Option[T].

Dodatkowo, składnia Scala umożliwia napisanie B ~> C jako skróconego dla ~>[B, C].

Może robi się jaśniejsze, jeśli przemianować go:

trait Category[Mapping[_, _]] { 
    def compose[A, B, C](f: Mapping[B, C])(g: Mapping[A, B]): Mapping[A, C] 
    def id[A]: Mapping[A, A] 
} 
+0

teraz jest jaśniej ... Myślę, że będzie przyzwyczaić się do korzystania dziwne char nazwać rzeczy (w przeciwieństwie do Javy). Pomyślałem, że "~>" znaczy coś specjalnego, ale można je zastąpić czymkolwiek, ponieważ rozumiem to poprawnie. Dziękuję bardzo! – Andrea

+0

Tak, jest to całkowicie dowolne (oczywiście w ramach zasad nazewnictwa Scali dotyczących identyfikatorów). – Debilski

+8

Nawiasem mówiąc: powodem, dla którego wybrano "operatora", czyli znaki operatora, a nie znaki literowe, była nadzieja, że ​​w dziedzinie teorii kategorii ~> łatwo przekłada się na koncepcję "morfizmu" (znanego też jako "mapowanie"). , "strzałka" itp.). Zwykle powinieneś uważać na operatorów. –