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

#exception #haskell #throw

#исключение #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"
  

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