Trả lời

7

Câu trả lời rất đơn giản: vì chúng có thể xuất hiện trong các loại. Do đó, họ phải sống ở cấp độ loại (nếu không bạn sẽ cần các loại phụ thuộc). Và bởi vì chúng sống ở cấp độ loại, chúng được phân loại theo một loại.

+0

Câu trả lời này đã đặt mọi thứ vào vị trí trong đầu của tôi. Cảm ơn! – Fixpoint

7

Hệ thống ghi xác định quy tắc cho các giá trị, loại và (có thể) các loại. Những quy tắc nào được sử dụng phụ thuộc vào hệ thống kiểu được thiết kế và những gì nhà thiết kế mong muốn đạt được.

Ví dụ: trong Haskell, hãng thu âm là:

  • giá trị (các chức năng accessor)
  • những giá trị đó có các loại (ví dụ Record -> Int)
  • những loại có loại (*)

hệ thống kỷ lục khác có thể sử dụng hệ thống loại hoặc loại cho các mục đích khác nhau.

Bằng cách đặt nhãn theo loại riêng biệt, trình kiểm tra loại có thể xử lý chúng đặc biệt, với các quy tắc đặc biệt cho ví dụ: ống kính tự động, hoặc bằng chứng để làm với xây dựng hồ sơ (tổng số có lẽ) không đúng với chức năng mục đích chung.

Ví dụ về việc sử dụng hệ thống loại trong Haskell là sử dụng "loại không được hộp". Đây là những loại có:

  • đại diện thời gian chạy khác nhau để các giá trị thường xuyên
  • hình thức ràng buộc khác nhau (ví dụ như không thể được cấp phát trên heap)

Để giữ cho các loại không có hộp bọc từ pha trộn với bình thường các loại, chúng được cung cấp loại khác nhau, cho phép trình biên dịch theo dõi sự phân tách của chúng. Vì vậy, không có gì kỳ diệu về tên nhãn bản ghi có nghĩa là bạn phải sử dụng một loại khác để đại diện cho chúng - đó chỉ là sự lựa chọn mà một nhà thiết kế ngôn ngữ có thể thực hiện - và bằng ngôn ngữ được đánh máy phụ thuộc như Ur hoặc Twelf, đó có thể là một sự phân biệt hữu ích.

+0

Cảm ơn, ví dụ về các loại không được mở là khai sáng – Fixpoint

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