Có cách nào để kiểm tra tĩnh trên mảng Haskell không? Chúng ta hãy xem đoạn mã này:Kiểm tra giới hạn tĩnh trên mảng Haskell
import Data.Array
let a = listArray (0, 10) [-3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02, 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00]
(0, 10)
thực sự nên (0, 5)
, nhưng trình biên dịch chấp nhận mã. Lỗi này chỉ được phát hiện trong thời gian chạy, mặc dù thực tế là nó có thể được phát hiện tại thời gian biên dịch.
Có lẽ nó có thể được phát hiện * trong trường hợp này * - ** nếu ** trình biên dịch thực hiện rất nhiều nội tuyến và liên tục gấp để đạt được một lỗi 'vô điều kiện' (hoặc bất kỳ) vô điều kiện nào. Trong hầu hết các chương trình không phát triển, nó không thể được phát hiện, ít nhất là không phải với nỗ lực hợp lý. Và sau đó có vấn đề này ngăn chặn pesky ... – delnan
Sử dụng [Habit] (http://hasp.cs.pdx.edu/habit-report-Nov2010.pdf) (PDF) Các loại Ix để có được một bảo đảm tĩnh của giới hạn. Điểm thưởng nếu bạn chuyển công việc này sang Haskell. –
Có một cách, nhưng quá bất tiện khi thực tế. Để biết thêm thông tin về điều này, hãy thử tìm kiếm trên web cho "số lượng cấp loại haskell". –