Esiste un modo per ottenere controlli statici sugli array Haskell? Prendiamo questo codice:Controlli dei limiti statici sugli array 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)
in realtà dovrebbe essere (0, 5)
, ma il compilatore accetta il codice. L'errore viene rilevato solo in fase di esecuzione, nonostante possa essere rilevato in fase di compilazione.
Forse potrebbe essere rilevato * in questo caso * - ** se ** il compilatore esegue molte inlining e piegature costanti per raggiungere una chiamata 'error' (o qualunque) incondizionata. Nella maggior parte dei programmi non banali, non può essere rilevato, almeno non con uno sforzo ragionevole. E poi c'è questo fastidioso problema di interruzione ... – delnan
Utilizzare [Abitudine] (http://hasp.cs.pdx.edu/habit-report-Nov2010.pdf) (PDF) Tipi Ix per ottenere una garanzia statica di limiti. Punti bonus se porti questo lavoro a Haskell. –
C'è un modo, ma è troppo scomodo per essere pratico. Per ulteriori informazioni, prova a cercare nel Web "haskell dei numeri a livello di testo". –