2012-07-22 37 views
24

Quay trở lại ít nhất vào cuối những năm 1990 đã có những người muốn tích hợp restricted monads vào Haskell một cách thân thiện.Trạng thái hiện tại của monads bị hạn chế là gì?

Ví dụ: không có monads bị giới hạn, bạn không thể tạo đơn nguyên hiệu quả trong số Set, Map hoặc probability distributions. Đây là một SO question từ một vài năm trước đây, nơi một người nào đó khác đã gặp vấn đề này.

Có cách giải quyết khác nhau mà mọi người đã đưa ra, bao gồm:

Tuy nhiên, không có cách tiếp cận nào có vẻ "kinh điển". Tôi đã tìm thấy một bình luận từ Don Stewart vào ngày this blog post, vào năm 2007, nơi ông đã gợi ý rằng chúng tôi đã "khá gần" để có những monads bị hạn chế với Indexed types.

Trạng thái hiện tại là gì? Bây giờ có một cách 'kinh điển' để thực hiện các monads bị hạn chế không? Hay chúng ta vẫn đang sống với cách giải quyết?

+12

Tôi nghĩ rằng với các loại ràng buộc, nó là kinh điển như nó được, họ chỉ là một chút quá mới cho nó là giải pháp _common_ nhất. – leftaroundabout

Trả lời

11

Có một bài báo gần đây của Anders Persson, Emil Axelsson và Josef Svenningson cho thấy một cách để mã hóa các monads bị hạn chế. Tôi đã quên các chi tiết, nhưng tôi nhớ đó là một bài báo hay.

Persson, A.; Axelsson, E.; Svenningsson, J. (2011). Generic monadic constructs for embedded languages. IFL 2011, Hội nghị chuyên đề lần thứ 23 về thực hiện và áp dụng các ngôn ngữ chức năng.

+1

Cảm ơn Norman. Đối với bất kỳ ai quan tâm, bạn có thể lấy một bản sao của bài báo từ trang chủ của [Josef Svenningson] (http://www.cse.chalmers.se/~josefs/). –

10

Thực tế, bạn có thể có được một đơn vị Đặt đơn vị hiệu quả làm đơn vị thông thường, mà không có bất kỳ hạn chế nào. Theo hai cách khác nhau. Bài viết sau đây giải thích cả hai:

http://okmij.org/ftp/Haskell/set-monad.html

Bài báo cũng chỉ ra rằng monads hạn chế là thực sự khá hạn chế và ngăn cản nhiều thành ngữ monadic. Tôi phỏng đoán rằng phương pháp thực hiện là chung và bất kỳ đơn nguyên bị hạn chế nào có thể được chuyển thành phương thức thông thường, mà không làm mất hiệu quả. Vì vậy, có vẻ như rằng chúng tôi không cần các monads bị hạn chế.

+0

Tôi thực sự đã sử dụng ý tưởng đằng sau đơn vị Set hiệu quả của bạn để xây dựng một đơn vị phân phối xác suất hiệu quả (xem https://github.com/chris-taylor/hs-probability/blob/master/src/Control/Probability/Bayes.hs) .. cảm ơn! Tôi đã không nghĩ về việc làm điều tương tự cho các monads bị hạn chế khác, nhưng tôi không thể ngay lập tức thấy một lý do tại sao nó sẽ không hoạt động. –

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