tl; dr; Các loại là trừu tượng bao quát trên một sự tiếp nối
Tiếp tục là loại đầu vào và đầu ra của nó
Điều gần nhất mà bạn sẽ tìm thấy đối với việc tiếp tục không dựa trên thủ tục có thể là đơn vị tiếp tục trong Haskell vì nó được biểu thị dưới dạng một loại, trong đó nhiều chức năng có thể được sử dụng để tương tác với loại để ngắt, tiếp tục, quay lui, et al.
Bạn có thể gói gọn việc đóng cửa đó trong một loại, chẳng hạn như Cont
loại trong Haskell nơi bạn có được sự trừu tượng hóa đơn nguyên như là một "sự trừu tượng hóa cấp độ cao hơn", và có những hình thức trừu tượng khác đối với sự tiếp tục mà bạn có được khi bạn xem tiếp tục như một loại thay vì đơn giản là một thủ tục , ví dụ
- Bạn có thể thực hiện hai lần tiếp tục và thực hiện một thay thế giữa chúng nếu loại tuân theo luật là một hình đơn sắc
- Bạn có thể trừu tượng về loại để thay đổi các loại đầu vào hoặc đầu ra của phần tiếp theo nếu bạn gói gọn việc đóng trong một loại tuân theo luật của functor
- Bạn có thể tùy ý và áp dụng một phần hoặc trang trí phần tiếp theo của mình bằng chức năng như xác thực đầu vào hoặc chuyển đổi đầu vào nếu bạn đóng gói đóng trong một loại tuân theo luật của functor áp dụng
Đóng cửa so với thủ tục
Vào cuối ngày, về cơ bản bạn đúng; tiếp tục là một "thủ tục", mặc dù tôi muốn gọi nó là một đóng cửa. Thông thường các lần tiếp tục được thể hiện tốt nhất khi đóng cửa lớp đầu tiên đã bao quanh một môi trường ràng buộc. Trong một ngôn ngữ chức năng thuần túy, bạn có thể nói điều này không đặc biệt hợp lý vì bạn thiếu tài liệu tham khảo; Điều này đúng nhưng bạn có thể kèm theo các giá trị và phép gán đơn làm cho việc bao quanh giá trị so với tham chiếu giống hệt nhau. Điều này dẫn đến trong Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
Một ngôn ngữ thiếu khả năng kèm theo một môi trường ràng buộc về mặt kỹ thuật có thể thiếu các lần đóng lớp đầu tiên, nhưng ngay cả khi đó có một số môi trường (nói chung là toàn cầu) có sẵn để đóng.
Vì vậy, tôi muốn nói rằng chính xác hơn để mô tả một phần tiếp theo là: Một bao đóng được sử dụng theo một cách cụ thể.
Phần kết luận
Đối với câu hỏi "Việc tiếp tục có thể thực hiện theo bất kỳ cách nào khác ngoài thủ tục không?" Không. Nếu bạn không có các hàm hạng nhất, bạn thực sự không thể có các phần tiếp theo như vậy (các con trỏ hàm có được tính là các hàm hạng nhất, do đó, việc truy cập bộ nhớ tùy ý có thể đủ).
Bây giờ với câu hỏi "Có cách nào để diễn đạt sự tiếp nối theo cách trừu tượng hơn thủ tục không?" Thể hiện nó như một kiểu mang lại cho bạn sự trừu tượng lớn hơn nhiều, cho phép bạn xử lý việc tiếp tục theo những cách rất chung chung để bạn có thể tương tác với việc tiếp tục theo nhiều cách hơn là chỉ thực hiện nó.