2015-04-20 15 views
9

so cheExit tranquillamente (senza eccezioni) Haskell

exitWith ExitSuccess 

esce dal programma, ma emette

*** Exception: ExitSuccess 

Sono voler sapere se c'è modo di uscire senza emettere nulla sullo schermo?

+2

Non dovrebbe stampare quello, cosa stai facendo esattamente? –

+0

Stai eseguendo quel codice in ghci? Quando compilo * il codice non lo stampa, ma usando ghci mostra l'errore. Credo che sia perché ghci aggiunge un gestore di eccezioni personalizzato (in effetti non esce affatto!) – Bakuriu

+0

Sto usando Haskell Platform, che credo funzioni in ghci. Ecco uno snippet del mio codice: se opt == 3, allora esci con ExitSuccess else ... – Ali

risposta

8

Espansione dei commenti sopra qui (Crediti a Reid, Bakuriu e Jeffrey). E 'altamente probabile che si sta eseguendo il seguente programma in ghci:

import System.Exit 

main :: IO() 
main = exitWith ExitSuccess 

Ora nel terminale:

$ ghci 
λ> :load crash.hs -- crash.hs is the filename 
λ> main 
*** Exception: ExitSuccess 

noti che ghci e ghc sono diversi. ghci viene utilizzato come REPL per Haskell. Il codice di cui sopra, quando compilato ed eseguito come la seguente non produrrà alcun messaggio:

$ ghc -o crash crash.hs 
$ ./crash 

Si noti che il REPL viene richiamato attraverso il programma denominato ghci. Per compilare e produrre un eseguibile, devi usare un eseguibile chiamato ghc.

+0

Quindi dovrei semplicemente ignorare l'output "*** Exception: ExitSuccess" che ghci produce e continua con il codice? – Ali

+0

@ Sì Sì, puoi ignorarlo in 'ghci'. Non importa comunque. Tutto ciò che devi preoccuparti è lo stato di uscita del processo. E questo è '0' come previsto. – Sibi

+0

Grazie. Ho accettato la tua risposta, che è un'aggiunta dei tre commenti precedenti. – Ali