Как выбросить исключение и выйти из программы в Haskell?

У меня вопрос: как я могу сделать исключение и выйти из программы? Я написал простой пример:

-- 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"

Я хочу запустить это и выбросить исключение и выйти из программы, но как?

Ответы

Ответ 1

Ну, вы можете попробовать

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"

Часто существует больше механизмов haskelly, которые вы могли бы использовать, например, возвращаемые значения, упакованные в тип Maybe или какую-либо другую структуру, описывающую отказ. Исключения, по-видимому, лучше подходят в тех случаях, когда возвращение сложных типов затруднит использование повторно используемых интерфейсов.