2011-05-20 9 views
14

मेरे पास एक प्रश्न है: मैं अपवाद कैसे फेंक सकता हूं और प्रोग्राम से बाहर निकल सकता हूं? मैं एक साधारण उदाहरण के नीचे लिखा है:अपवाद फेंकने और हास्केल में प्रोग्राम से बाहर निकलने के लिए कैसे?

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

मैं, इस शुरू करने और एक अपवाद फेंक और बाहर निकलने के लिए कार्यक्रम चाहते हैं, लेकिन कैसे?

उत्तर

26

ठीक है, आप

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 तंत्र, इस तरह के मूल्यों लौटने के रूप में है कि आप इस्तेमाल कर सकते हैं कर रहे हैं शायद प्रकार या कुछ अन्य संरचना में पैक किया गया जो विफलता का वर्णन करता है। अपवाद ऐसे मामलों में बेहतर लगते हैं जहां जटिल प्रकार लौटने से अन्यथा पुन: उपयोग करने योग्य इंटरफ़ेस जटिल हो जाएंगे।

संबंधित मुद्दे