19

質問があります: 例外をスローしてプログラムを終了するにはどうすればよいですか? 簡単な例を書き留めました:

-- main.hs
import Test

main = do
    Test.foo ""
    putStrLn "make some other things"

モジュールは次のとおりです。

moldule Test where

foo :: String -> IO ()
foo x = do
    if null x
    then THROW EXCEPTION AND EXIT MAIN else putStrLn "okay"

これを開始して例外をスローし、プログラムを終了したいのですが、どうすればよいですか?

4

1 に答える 1

35

さて、あなたは試すことができます

foo :: String -> IO ()
foo x = do
    if null x
    then error "Oops!" else putStrLn "okay"

または、最終的にエラーをキャッチする場合は、

import Control.Exception
data MyException = ThisException | ThatException
   deriving (Show, Typeable)

instance Exception MyException

...

foo :: String -> IO ()
foo x = do
    if null x
    then throw ThisException else putStrLn "okay"

多くの場合、多分型にパックされた値を返す、または失敗を説明する他の構造など、使用できるより厄介なメカニズムがあります。複雑な型を返すと、他の方法で再利用可能なインターフェイスが複雑になりすぎる場合は、例外の方が適しているようです。

于 2011-05-20T10:12:25.307 に答える