2011-05-20 30 views
14

Bir sorum var: bir özel durumu nasıl atacağım ve programdan nasıl çıkacağım? Ben basit bir örnek aşağı yazılı adres: modülBir istisna nasıl atılır ve Haskell'deki programdan nasıl çıkılır?

İşte
-- main.hs 
import Test 

main = do 
    Test.foo "" 
    putStrLn "make some other things" 

geçerli:

moldule Test where 

foo :: String -> IO() 
foo x = do 
    if null x 
    then THROW EXCEPTION AND EXIT MAIN else putStrLn "okay" 

Ben programı bu başlangıç ​​ve bir özel durum ve çıkmak istiyor ama nasıl? Sonra, en sonunda hatayı yakalamak niyetinde olmadığını

cevap

26

Eh,

foo :: String -> IO() 
foo x = do 
    if null x 
    then error "Oops!" else putStrLn "okay" 

deneyin Veya olabilir

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" 

Orada bu tür değerleri dönen gibi kullanabilirsiniz genellikle daha haskelly mekanizmaları vardır Belki yazın veya hatayı açıklayan başka bir yapı. Geri dönen karmaşık türlerin, yeniden kullanılabilir arayüzleri çok fazla zorlaştırdığı durumlarda istisnalar daha iyi görünmektedir.