2013-03-28 27 views
10

Có rất nhiều thông tin về các loại phụ thuộc trong Haskell và Scala. Đối với OCaml, không nhiều lắm. Có ai có kỹ năng, đủ để cung cấp một ví dụ mã hóa làm thế nào để đạt được điều này trong OCaml (nếu nó có thể ở tất cả)? Có tất nhiên (bị bỏ rơi) Dependent ML, nhưng có vẻ như không thể kết hợp những thứ như vậy trong mã OCaml "thông thường".Các loại phụ thuộc trong OCaml

Về cơ bản, điều tôi muốn làm là xóa mã như assert(n > 0) và kiểm tra mã tại thời gian biên dịch.

EDIT

Là một mặt lưu ý, nó có giá trị nhắc đến chi nhánh OCaml Hybrid Contract Checking, mà có thể điền vào một số nhu cầu của một hệ thống kiểu phụ thuộc. Thay vì assert(n > 0) sau đó bạn sẽ viết một hợp đồng:

liên kết
contract f = {x : x > 0} -> int 
let f x = x + 1 
let dummy_variable = f (-1) (* Won't compile *) 
+2

Tôi có thể hỏi "rất nhiều thông tin về các loại phụ thuộc trong Haskell và Scala" ở đâu? Mặc dù có một cái nhìn tổng quan hợp lý về cộng đồng Haskell, tôi không biết bạn đang đề cập đến điều gì. (Tôi chắc chắn sẽ xem xét công việc của UPenn về [Dependently-Typed Haskell] (http://www.cis.upenn.edu/~sweirich/) là có liên quan, nhưng đó là nghiên cứu cực kỳ hơn là thực tế, và có thể không "nhiều" về khối lượng). Tôi không biết bạn đang nghĩ gì về Scala - ngoại trừ mối quan hệ với các kiểu phụ thuộc vào con đường? – gasche

+0

Ehm, trên stackoverflow, tôi đã suy nghĩ. Có lẽ tôi đã bị lừa bởi các kiểu con đường phụ thuộc vào Scalas. –

Trả lời

10

Tham chiếu là Oleg của lightweight dependent typing trang, với các ví dụ (trong OCaml hoặc bạn có thể dịch để OCaml) các kỹ thuật phụ thuộc như được sử dụng trong ngôn ngữ ML. Bài báo của ông trên Lighweight static capabilities (PDF) với Chung-chieh Shan trong năm 2007 là đặc biệt có liên quan.

Chỉnh sửa: Kể từ phiên bản 4.00 (được phát hành sau khi tài liệu trên được viết), OCaml có GADT, cho phép sắp xếp một số kỹ thuật cho thông tin tĩnh tinh chế (trước đây dựa vào kỹ thuật kiểu ma), đặc biệt là "loại singleton" mẫu được thể hiện trong Omega. Nó đã được chứng minh rằng họ không cần thiết để có được lập trình đánh máy mạnh mẽ, nhưng họ vẫn có thể được sử dụng bởi một loạt các ví dụ được tìm thấy trong tự nhiên.

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