2012-04-10 3 views
24

У меня есть следующее определение класса Scala (содержится в документе), моделирующие категории:Scala ~> (тильда больше) оператора

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

может кто-то объяснить мне, что «~>» означает, что в категории type, а в методе возвращаемого типа? Или направить меня к ресурсу, который объясняет это ... Я новичок в Scala (исходя из Java), так что простите меня, если что-то пользователь должен Scala известно ... Спасибо заранее

ответ

26

~> - это просто имя-заполнитель для параметра типа Category. Как T в class Option[T].

Кроме того, синтаксис Scala позволяет вам написать B ~> C в виде сокращенного описания для ~>[B, C].

Может быть, все становится яснее, если переименовать его:

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

Теперь это ясно ... Я думаю, что я привыкну быть свободным, чтобы использовать странный символ, чтобы назвать вещи (в отличие от Java). Я действительно думал, что «~>» означает нечто особенное, но его можно заменить чем-либо, поскольку я понимаю это правильно. Большое вам спасибо! – Andrea

+0

Да, это совершенно произвольно (конечно, в правилах именования Scala для идентификаторов). – Debilski

+8

Кстати: причина, по которой был выбран «оператор», т. Е. Символы оператора вместо буквенных символов, была надеждой, что в области теории категорий ~> легко переводится понятие «морфизма» (так называемое «отображение», , "стрелка" и т. д.). Обычно вы должны быть осторожны с операторами. –

Смежные вопросы