2011-10-19 24 views
11

Nếu tôi phát hiện ra điều gì đó là Monoid hoặc Monad, tôi sẽ sử dụng tất cả các loại chức năng thú vị, như foldMap, sequence hoặc thậm chí mapM. Họ làm cho tôi hạnh phúc.Control.Category tốt là gì?

Tôi phải làm gì nếu tôi phát hiện ra điều gì đó là Category? Tôi có thấy điều gì thú vị ngoài việc quá tải id(.)?

+4

Như với tất cả các trừu tượng, có một sự cân bằng: hoặc bạn có thể làm rất nhiều thứ với họ, hoặc bạn tìm ra rất nhiều thứ là trường hợp của chúng. Danh mục đi xa như họ có thể hướng tới "rất nhiều điều là trường hợp của họ" bên của sự cân bằng: damn gần mỗi ý tưởng toán học có một thể loại cơ bản. Giá bạn trả cho thuật ngữ chung giữa tất cả những ý tưởng này là chỉ đơn thuần gọi một thứ gì đó mà một danh mục không cung cấp cho bạn nhiều thông tin. Nếu bạn muốn nhiều hơn, bạn phải lén lút tính từ trên: "cartesion closed category", hoặc "braided monoidal category", v.v. –

Trả lời

9

Tôi có điều gì thú vị ngoài việc quá tải id và (.) Không?

Vâng, bạn cũng (nên) được pháp luật liên kết với chúng:

"identity/left" forall p . 
       id . p = p 
"identity/right"  forall p . 
       p . id = p 
"association" forall p q r . 
       (p . q) . r = p . (q . r) 

Như một mặt lưu ý: Lý do mà bạn không nhận được rằng nhiều chức năng vui vẻ như mapM hoặc foldMap là , nói rằng một cái gì đó là một thể loại thực sự nói rất ít về nó. Các chức năng hữu ích nhất mà tôi đoán là những người quy định tại Control.Category, mà đôi khi làm cho mã dễ đọc hơn: >>><<<

+2

Phụ lục: "Wikipedia nói" rằng lý thuyết thể loại được coi là 'vô nghĩa trừu tượng chung' (một cách tốt), bởi vì nó cực kỳ trừu tượng. –

7

Control.Category chỉ là công việc mặt bằng Control.Arrow, và đó là nơi bạn có được những chức năng thú vị từ.

Các vấn đề liên quan