2015-04-20 12 views
9

wiem, żeWyjście cicho (bez wyjątku) Haskell

exitWith ExitSuccess 

zamyka program, ale wyprowadza

*** Exception: ExitSuccess 

Ja chce wiedzieć, czy istnieje sposób, aby wyjść bez wpisywanie czegokolwiek na ekranie?

+2

Nie należy drukować tego, co dokładnie robisz? –

+0

Czy wykonujesz ten kod w ghci? Kiedy * skompiluję * kod, to go nie drukuje, ale używając ghci pokazuje błąd. Wierzę, że to dlatego, że ghci dodaje niestandardowy moduł obsługi wyjątków (w rzeczywistości wcale się nie kończy!). – Bakuriu

+0

Używam platformy Haskell, która, jak sądzę, jest wykonywana w ghci. Oto fragment kodu: jeśli opt == 3, to wyjdź z ExitSuccess jeszcze ... – Ali

Odpowiedz

8

Poszerzenie powyższych komentarzy tutaj (Kredyty dla Reida, Bakuriu i Jeffreya). Jest wysoce prawdopodobne, że realizują następujący program w ghci:

import System.Exit 

main :: IO() 
main = exitWith ExitSuccess 

Teraz w terminalu:

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

Zauważ, że ghci i ghc są różne. ghci służy jako REPL dla Haskell. Powyższy kod, gdy kompilowany i wykonywany jak następuje nie będzie produkować dowolną wiadomość:

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

Należy pamiętać, że REPL jest wywoływana przez program o nazwie ghci. Aby skompilować i utworzyć plik wykonywalny, należy użyć pliku wykonywalnego o nazwie ghc.

+0

Więc powinienem po prostu zignorować wyjście "*** Exception: ExitSuccess", które ghci produkuje i kontynuuje z kodem? – Ali

+0

@Ali Tak, możesz to zignorować w 'ghci'. I tak nie ma to znaczenia. Jedyne, co musisz się martwić, to kod zakończenia procesu. A to jest "0" zgodnie z oczekiwaniami. – Sibi

+0

Dziękuję. Przyjąłem twoją odpowiedź, która jest dodatkiem trzech komentarzy wcześniej. – Ali

Powiązane problemy