我有一个问题:如何抛出异常并退出程序?我写了一个简单的例子:
-- 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"
我想启动它并抛出异常并退出程序,但是如何?
答案 0 :(得分:29)
好吧,你可以试试
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类型打包的值或描述失败的其他结构。在返回复杂类型会使其他可重用的接口过于复杂的情况下,异常似乎更合适。