Tại sao Haskell không có trừu tượng lambda cấp độ?


22

Có một số lý do lý thuyết cho điều đó (như việc kiểm tra kiểu hoặc suy luận kiểu sẽ trở nên không thể giải quyết được), hoặc lý do thực tế (quá khó để thực hiện đúng)?

Hiện tại, chúng ta có thể gói mọi thứ vào newtypenhư

newtype Pair a = Pair (a, a)

và sau đó có Pair :: * -> *

nhưng chúng ta không thể làm một cái gì đó như λ(a:*). (a,a).

(Có một số ngôn ngữ có chúng, ví dụ, Scala có .)


4
Việc chọn một loại hệ thống loại vào sử dụng sẽ loại trừ loại hệ thống loại khác vì toàn bộ điều cần phải nhất quán. Loại lambda cấp độ sẽ rất lạ trong lý thuyết thể loại ...
tp1

Câu trả lời:


17

Kiểu suy luận với lambdas cấp độ sẽ yêu cầu thống nhất bậc cao hơn là điều không thể giải quyết được. Đây là động lực để không cho phép họ. Nhưng như đã xảy ra với các tính năng không thể giải quyết khác (như suy luận kiểu cho GADT), có thể yêu cầu chữ ký loại và cho phép nó. Tôi không chắc chắn nếu điều đó đã được điều tra bởi bất cứ ai.

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.