Vì vậy, trong Idris nó hoàn toàn hợp lệ để viết như sau.Sự khác biệt giữa Haskell và Idris: Sự phản ánh của Runtime/Compiletime trong các loại vũ trụ
item : (b : Bool) -> if b then Nat else List Nat
item True = 42
item False = [1,2,3] // cf. https://www.youtube.com/watch?v=AWeT_G04a0A
Không có chữ ký loại, điều này trông giống như ngôn ngữ được nhập động. Nhưng, quả thật vậy, Idris được đánh máy một cách phụ thuộc. Loại bê tông item b
chỉ có thể được xác định trong thời gian chạy.
Đây là, tất nhiên, một lập trình viên Haskell nói: Loại item b
trong ý nghĩa Idris được đưa ra trong thời gian biên dịch, nó là if b then Nat ...
.
Bây giờ câu hỏi của tôi: Tôi có quyền kết luận rằng trong Haskell, ranh giới giữa thời gian chạy và compiletime chạy chính xác giữa thế giới của các giá trị (False, "foo", 3) và thế giới của các loại (Bool, String , Integer) trong khi ở Idris, biên giới giữa thời gian chạy và compiletime đi qua vũ trụ? Ngoài ra, tôi có quyền giả định rằng ngay cả với các loại phụ thuộc trong Haskell (sử dụng DataKinds và TypeFamilies, xem this article) ví dụ trên là không thể trong Haskell, vì Haskell trái với Idris không cho phép các giá trị bị rò rỉ cho loại -cấp độ?
Câu hỏi hay! Tôi sẽ hướng sự chú ý của bạn đến [bài giảng này] (https://m.youtube.com/watch?v=ad4BVmPni7A) bởi @pigworker để bổ sung câu trả lời của mình –
Bạn có thể tạo chủ đề/thẻ idris-Universe và sử dụng nó không của vũ trụ, dành cho Cơ sở dữ liệu đa điểm. – Mike
@ Giống như "Tạo thẻ mới yêu cầu ít nhất 1500 danh tiếng ..." Tôi đoán, một thẻ thích hợp sẽ là "loại vũ trụ". –