Tôi không quen thuộc với công việc gần đây của Barry Jay, nhưng công việc cũ của anh ấy bao gồm những điều mà bạn không thể làm ở Lisp, vì các loại cung cấp thêm thông tin.
Ví dụ: giả sử bạn muốn xác định kích thước của cấu trúc dữ liệu Lisp. Đó là 1 cho một nguyên tử và n cho danh sách n nguyên tử và nói chung là kích thước (x) + kích thước (y) cho (cons x y)
.
Bây giờ ném các loại vào hỗn hợp. Kích thước của một danh sách sẽ là chiều dài của nó. Bây giờ kích thước của một danh sách các danh sách các nguyên tử là gì? Nếu bạn coi cấu trúc dữ liệu này là một danh sách (có các yếu tố tình cờ là danh sách các nguyên tử), câu trả lời là độ dài của danh sách. Nếu bạn coi cấu trúc dữ liệu này là chứa các nguyên tử tình cờ được lưu trữ trong danh sách danh sách, câu trả lời là tổng độ dài của danh sách thành phần.
Các loại cho phép bạn phân biệt giữa hai chế độ xem (hình dạng) của dữ liệu thô. Bạn cần một hệ thống loại cho phép bạn phân biệt giữa (Danh sách) (Danh sách nguyên tử) và (Danh sách danh sách) (Nguyên tử). Việc thực hiện phổ biến nhất của sự khác biệt này là với các lớp loại (như trong Haskell).