Tại sao ủy ban Haskell chọn các đơn vị đại diện cho I / O?


36

Các Sạch ngôn ngữ sử dụng loại độc đáo để xử lý I / O trong một khung cảnh hoàn toàn chức năng. Tại sao ban Haskell đi với monads để thay thế? Có đề xuất nào khác để xử lý nhà nước mà ủy ban điều tra nhưng quyết định chống lại?

Lưu ý : Tôi không tìm kiếm một cuộc chiến thần thánh giữa các đơn nguyên và các hình thức điện toán khác. Chúng ta hãy giữ chủ đề cho các lựa chọn của ủy ban về I / O.


Câu trả lời:


16

Theo A History of Haskell: Lazy With Class (xem phần 7), ba mô hình khác nhau đã được xem xét ban đầu: stream , continu"world world" (Tôi không biết nhiều về Clean, nhưng có vẻ như đây là cách Clean ?).

Đoạn cuối của phần 7.2 chỉ ra rằng khái niệm loại duy nhất không được phát triển tại thời điểm này:

Tuy nhiên, mô hình vượt qua thế giới này không bao giờ là một ứng cử viên nặng ký đối với Haskell, bởi vì chúng tôi không thấy cách nào dễ dàng để đảm bảo quyền truy cập đơn luồng của luồng đối với nhà nước thế giới. (Các nhà thiết kế Clean cuối cùng đã giải quyết vấn đề này thông qua việc sử dụng các loại tính duy nhất của Wap)

Khái niệm về các đơn vị dường như đã được giới thiệu (được sử dụng lại từ công việc khác) trong các phiên bản sau của Haskell vì nó dẫn đến mã sạch hơn (so với các phần tiếp theo / luồng):

Cách tiếp cận đơn nguyên nhanh chóng thống trị các mô hình trước đó. Các loại nhỏ gọn hơn, và nhiều thông tin hơn.


10

Lời giải thích tốt nhất tôi từng thấy là " Giải quyết đội hình vụng về " của Simon Peyton-Jones .

Từ những gì tôi nhớ từ bài báo, các vấn đề xung quanh sự lười biếng đóng một phần lớn trong quyết định. (Tôi không chắc chắn nếu Clean lười biếng theo mặc định giống như cách Haskell.)


5
Sạch cũng lười.
chrisaycock
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.