2013-03-17 34 views

Trả lời

15

Nếu bạn nhìn vào Ordering.on phương pháp sau đây của thư viện tiêu chuẩn:

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

Bạn sẽ thấy rằng on biến một Ordering[T] thành một Ordering[U] trong khi tham gia một chức năng từ U đến T. Vì vậy, các phương pháp on chứng thực tế là Ordering thể được xem như một functor Contravariant với:

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

Tôi cũng thấy các bài đăng blog từ Tony và nó đã giúp tôi cuối cùng đã làm cho tinh thần của đứa trẻ ba tuổi answer này từ retronym một về câu hỏi của tôi.

+0

Cảm ơn. Khá đơn giản một khi bạn nhìn thấy nó. – Bradford

16

Giả sử bạn có lớp Conversion[X,Y] thể hiện chuyển đổi từ giá trị loại X thành giá trị loại Y. Bạn có thể kết hợp nó với một hàm ?=>X để xử lý trước đầu vào hoặc với hàm Y=>? để xử lý hậu kỳ đầu ra. Ví dụ:

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

Bạn có nghĩa là "từ một giá trị của loại' X' cho một giá trị của loại 'Y'"? – huynhjl

+0

@huynhjl Cảm ơn. Tôi sửa lỗi đánh máy. – paradigmatic