2010-02-16 28 views
6

的Control.Exception文檔說我可以做以下創建我自己的異常:如何在Haskell中定義自定義異常?

data MyException = ThisException | ThatException 
    deriving (Show, Typeable) 

instance Exception MyException 

如果我粘貼到一個文件並編譯(進口Control.Exception和Data.Typeable後),我得到:

exp.hs:6:20: 
    Can't make a derived instance of `Typeable MyException' 
     (You need -XDeriveDataTypeable to derive an instance for this class) 
    In the data type declaration for `MyException' 

我必須打開此擴展才能擁有用戶定義的異常嗎?如果沒有,請提供一個例子。謝謝。

回答

5

是的,您需要打開該擴展。嘗試手動編寫Typeable實例並不是一個好主意,因爲它與GHC的內部有一些聯繫。

+1

這是否意味着一般情況下,Haskell中沒有用戶定義的異常? – me2

+2

如果您的意思是Haskell標準,那麼沒有用戶定義的例外。如果您的意思是由GHC實施的擴展語言,那麼它們確實存在,如上所述。 –