Một trong những đổi mới lớn trong FP đã dẫn đến "sự bùng nổ" của sự quan tâm là các đơn nguyên.
Vào tháng 1 năm 1992, Philip Wadler đã viết một bài báo có tên là Bản chất của lập trình chức năng giới thiệu các đơn vị vào lập trình chức năng như một cách để đối phó với IO.
Vấn đề chính với các ngôn ngữ lập trình chức năng, lười biếng, thuần túy là tiện ích trong việc xử lý IO. Đó là một trong những thành viên của "Biệt đội vụng về" trong lập trình, bởi vì "sự lười biếng và tác dụng phụ, theo quan điểm thực tế, không tương thích. Nếu bạn muốn sử dụng một ngôn ngữ lười biếng, nó gần như phải là một ngôn ngữ chức năng thuần túy; nếu bạn muốn sử dụng các tác dụng phụ, tốt hơn hết bạn nên sử dụng một ngôn ngữ nghiêm ngặt. " Tài liệu tham khảo
Vấn đề với IO trước các đơn vị là việc duy trì độ tinh khiết là không thể đối với các chương trình thực sự hữu ích cho mọi thứ. Theo IO, chúng tôi có nghĩa là bất cứ điều gì liên quan đến việc thay đổi trạng thái, bao gồm nhận đầu vào và đầu ra từ người dùng hoặc môi trường. Trong lập trình chức năng thuần túy, mọi thứ đều bất biến, để cho phép sự lười biếng và tinh khiết (không có tác dụng phụ).
Làm thế nào để các đơn vị giải quyết vấn đề của IO? Chà, không thảo luận về các đơn vị quá nhiều, về cơ bản, họ lấy "Thế giới" (môi trường thời gian chạy) làm đầu vào cho đơn nguyên và tạo ra một "Thế giới" mới làm đầu ra và kết quả: nhập IO a = World -> (a, Thế giới).
Do đó, FP đã tham gia ngày càng nhiều vào dòng chính, bởi vì vấn đề lớn nhất, IO (và những người khác) đã được giải quyết. Việc tích hợp vào các ngôn ngữ OO hiện tại cũng đã xảy ra, như bạn đã biết. LINQ là đơn nguyên, ví dụ, thông qua và thông qua.
Để biết thêm thông tin, tôi khuyên bạn nên đọc về các đơn nguyên và các bài viết được tham khảo trong câu trả lời của tôi.