#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, или какую-либо другую структуру, описывающую сбой. Исключения, похоже, лучше подходят в случаях, когда возврат сложных типов слишком сильно усложнил бы повторно используемые интерфейсы.