2014-12-25 16 views
5

Tendo a digitare ripetutamente i miei programmi in un terminale modificandoli nel mio editor di scelta per ottenere un feedback in tempo reale. In genere eseguo qualcosa simile a: watch -d -n 1 "ghc -fno-code NoIncompletePM.hs".ghc non segnala corrispondenze non esaustive del modello quando si utilizza il flag `no-code`

Sfortunatamente il flag no-code che uso per evitare di compilare ancora e ancora codice non mi interessa ancora sembra essere incompatibile con lo warn-incomplete-patterns. Per esempio. con questo programma:

{-# OPTIONS -Wall    #-} 
module NoIncompletePM where 

argh :: Bool -> Bool 
argh True = True 

ho mai ottenere alcun avviso che argh manca un caso per False. È possibile ottenere tutti questi avvisi rimuovendo la bandiera no-codee aggiungendo lo force-recomp uno (in modo che l'avviso sia visualizzato ogni volta e non solo la prima volta che viene compilato) ma io voglio proprio evitare di compilarlo codice ...

Non sono riuscito a trovare nulla nel manuale che descrivesse questi come incompatibili, quindi suppongo che sia un comportamento inaspettato o sto facendo qualcosa di sbagliato. Qualche indizio?

+0

Punti secondari: 1) Il polling con 'watch' sembra non ottimale quando non si modifica il codice. Potresti scrivere il tuo strumento che esegue ghc solo quando la fonte è cambiata: in tal caso manterresti i vecchi messaggi, rendendo 'force-recomp' inutile. 2) Emacs Flymake fa esattamente quello che stai cercando di fare (non so quali flag passi a ghc - potrebbe generare del codice dopo tutto). Sono abbastanza sicuro che ci siano anche altri editor con la stessa funzionalità. 3) 'no-code' che influenza gli avvisi sembra davvero sbagliato, ma non riesco a riprodurlo. – chi

risposta

1

Si tratta di un noto bug GHC:

https://ghc.haskell.org/trac/ghc/ticket/8101

Si noti che se si passa il flag -c per la modalità one-shot, allora si fai ottenere avvertimenti. Quindi questa è una soluzione per ora.

Tristemente, sembra (https://ghc.haskell.org/trac/ghc/ticket/10600) che ghc 8.0 potrebbe rompere questo funzionamento anche in modalità one-shot, almeno per un altro ciclo di rilascio.

+0

Ho passato a usare 'ghcid', ma non sono completamente soddisfatto di questa soluzione, quindi sono contento di sapere che c'è una soluzione alternativa. Grazie! – gallais