Czy istnieje sposób na sprawdzenie statyczne tablic Haskell? Weźmy ten kod:Statyczna kontrola granic macierzy 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)
powinien być naprawdę (0, 5)
, ale kompilator przyjmuje kodu. Błąd jest wykrywany tylko w środowisku wykonawczym, mimo że mógł zostać wykryty podczas kompilacji.
Być może można go wykryć * w tym przypadku * - ** jeśli ** kompilator wykonuje wiele operacji składających i stałych, aby uzyskać bezwarunkowe wywoływanie "błędu" (lub innego). W większości nietrywialnych programów nie można go wykryć, przynajmniej nie z rozsądnym wysiłkiem. A potem pojawia się ten brzydki problem z zatrzymaniem ... – delnan
Użyj [Habit] (http://hasp.cs.pdx.edu/habit-report-Nov2010.pdf) (PDF) Ix, aby uzyskać statyczną gwarancję granic. Dodatkowe punkty, jeśli przeniesiesz tę pracę do Haskell. –
Jest sposób, ale zbyt niewygodny, aby być praktycznym. Aby dowiedzieć się więcej na ten temat, spróbuj przeszukać internet pod kątem "numerów typu haskell". –