Как сгенерировать исключение и выйти из программы в Haskell? - PullRequest
17 голосов
/ 20 мая 2011

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

-- 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 Ответ

29 голосов
/ 20 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...