Toán học cần thiết để hiểu lý thuyết đằng sau hệ thống loại của Haskell?


9

Gần đây, tôi trở nên quan tâm sâu sắc đến Haskell.

Trong khi cố gắng học các khái niệm mới (ví dụ: từ khóa forallST monad ) và hệ thống loại của Haskell nói chung, tôi liên tục chạy vào các khái niệm từ lý thuyết thể loạiphép tính lambda . Vì vậy, tôi tự hỏi:

  1. Những nhánh khác của toán học là quan trọng đối với sự hiểu biết mạnh mẽ về hệ thống loại của Haskell?

  2. Tôi có thể từ bỏ một nghiên cứu nghiêm ngặt về các toán học này và thay vào đó tập trung vào các khái niệm thích hợp nhất định? (ví dụ: bộ định lượng trong phép tính lambda.) Nếu vậy, khái niệm nào là thiết yếu?

Tôi hy vọng sẽ sớm nhận được các loại và ngôn ngữ lập trình , vui lòng đề xuất bất kỳ tài nguyên đọc thay thế nào bạn cảm thấy phù hợp.


4
Các công cụ lý thuyết thể loại không cần thiết để biết và làm việc với Haskell, nhưng nó có thể giúp với một số khái niệm nền tảng. Nhánh toán học thực sự duy nhất để hiểu thứ này là từ lý thuyết Thể loại, nó không chỉ bắt nguồn từ đó, mà ở đó bạn sẽ thấy ít phụ thuộc vào các toán học khác, đó là một lĩnh vực rất cô lập theo cách đó. Nhặt tính toán Lambda và nghiên cứu các hệ thống loại khác nhau liên quan đến các biến lambda khác nhau, và ngoài việc đọc câu trả lời SO này và đọc về lý thuyết thể loại.
Jimmy Hoffa

3
Tôi sẽ không bị bắt kịp với việc làm chủ hệ thống loại cơ bản. Ít nhất đừng để mọi thứ không ngăn cản bạn hoàn thành một vài dự án. Chỉ cần hoàn thành một vài dự án đơn giản trong Haskell đã cho phép tôi thấy được vẻ đẹp toán học đằng sau nó và đã thúc đẩy tôi hiểu nó.
ChaosPandion

2
@ChaosPandion Tôi đồng ý với quan điểm đó, nhưng tôi đã làm việc trong một dự án có thể yêu cầu viết mã trong STđơn nguyên. Thật khó để viết mã sẽ biên dịch khi tôi không hiểu tất cả các chữ ký loại có liên quan, vì vậy tôi cảm thấy việc cải thiện sự hiểu biết của tôi về hệ thống loại sẽ là thận trọng.
Cướp

3
@robjb - Tôi chắc chắn đồng ý với bạn rằng một sự hiểu biết sâu sắc hơn là thận trọng. Thành thật mà nói, nhận xét của tôi đã nhắm nhiều hơn vào khán giả nói chung, những người có thể thấy Haskell quá đáng sợ thậm chí không thử.
ChaosPandion

Câu trả lời:


11

Không, bạn không cần chọn một cuốn sách về lý thuyết thể loại để hiểu Haskell.

Tôi đã sử dụng Haskell trong một vài năm và chọn một số lý thuyết thể loại vì tò mò, điều đó thực sự không cần thiết. Một mặt, thật tuyệt khi thấy tất cả những điều trừu tượng này phù hợp với "bức tranh lớn", nhưng tôi đã không đi "Ôi trời ơi, tôi chỉ cần biến điều này thành một trình bày từ Maybedanh mục sang []s và sau đó tôi có thể lưu công chúa!".

Bây giờ tùy thuộc vào những gì bạn đang làm với lý thuyết loại Haskell là trên hàng rào.

Nếu bạn chỉ đang học, đừng cố gắng hiểu mọi sắc thái của hệ thống . Xin đừng, nó giống như cố gắng học lập trình meta mẫu C ++ trước tiên. Các loại ưa thích là các công cụ tuyệt vời, nhưng có một sự hiểu biết tốt về nhịp lập trình chức năng hiểu được tính đa hình bắt buộc.

Bây giờ, hãy nói sau một hoặc hai năm của Haskell, bạn đang muốn tìm hiểu từng phần tinh tế về cách hệ thống loại của Haskell hoạt động, thì vâng, một số lý thuyết loại có thể hữu ích.

Nó sẽ giúp bạn hiểu một số logic đằng sau cách mọi thứ hoạt động, cộng với đó thực sự là một nhánh thực sự tuyệt vời của khoa học máy tính IMO đáng để xem xét. Bạn có thể chọn những phần bạn quan tâm và vẫn học được một lượng kha khá.

Đối với Haskell, xem xét các hệ thống loại STLC, HM (Hệ thống F) và có lẽ khối lambda (Haskell là Hệ thống Fw iirc) và các loại đệ quy. Các loại và ngôn ngữ lập trình là một tài nguyên tuyệt vời để bắt đầu và bao gồm tất cả những thứ này và nhiều hơn nữa.

Nếu bạn thực sự muốn uống đồ uống mát lạnh và khám phá bạn là một nhà lý thuyết kiểu vừa chớm nở, hãy đến Agda hoặc Coq. Những tính năng này "loại phụ thuộc", một bước xa hơn trong khối lambda so với Haskell. Các loại phụ thuộc cho các loại phụ thuộc vào các điều khoản. Điều này có nghĩa là các loại đủ mạnh để thực sự chứng minh các định lý. Đối với những người tò mò, googling "cà ri howard đẳng cấu" sẽ mang lại một số kết quả thú vị.


Một mô tả ngắn gọn về Agda và Coq sẽ hữu ích.
ChaosPandion

@ChaosPandion Cập nhật
Daniel Gratzer

Điều đó có vẻ tốt. Tôi chỉ cần nói rằng những cái tên sẽ không đủ để khơi gợi sự quan tâm của nhiều người.
ChaosPandion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.