GHC.Exception.Type
| Авторские права | (c) Университет Глазго 1998-2002 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | cvs-ghc@haskell.org |
| Устойчивость | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Достоверный |
| Язык | Haskell2010 |
Описание
Исключения и функции обработки исключений.
class (Typeable e, Show e) => Exception e where Исходный код
Любой тип, который вы хотите бросить или перехватить как исключение, должен быть экземпляром класса Exception. Простейший случай — это новый тип исключения непосредственно под корнем:
data MyException = ThisException | ThatException
deriving Show
instance Exception MyException
Определения методов по умолчанию в классе Exception делают то, что нам нужно в этом случае. Теперь вы можете бросить и перехватить ThisException и ThatException как исключения:
*Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException))
Caught ThisException
В более сложных примерах вы можете захотеть определить целую иерархию исключений:
---------------------------------------------------------------------
-- Make the root exception type for all the exceptions in a compiler
data SomeCompilerException = forall e . Exception e => SomeCompilerException e
instance Show SomeCompilerException where
show (SomeCompilerException e) = show e
instance Exception SomeCompilerException
compilerExceptionToException :: Exception e => e -> SomeException
compilerExceptionToException = toException . SomeCompilerException
compilerExceptionFromException :: Exception e => SomeException -> Maybe e
compilerExceptionFromException x = do
SomeCompilerException a <- fromException x
cast a
---------------------------------------------------------------------
-- Make a subhierarchy for exceptions in the frontend of the compiler
data SomeFrontendException = forall e . Exception e => SomeFrontendException e
instance Show SomeFrontendException where
show (SomeFrontendException e) = show e
instance Exception SomeFrontendException where
toException = compilerExceptionToException
fromException = compilerExceptionFromException
frontendExceptionToException :: Exception e => e -> SomeException
frontendExceptionToException = toException . SomeFrontendException
frontendExceptionFromException :: Exception e => SomeException -> Maybe e
frontendExceptionFromException x = do
SomeFrontendException a <- fromException x
cast a
---------------------------------------------------------------------
-- Make an exception type for a particular frontend compiler exception
data MismatchedParentheses = MismatchedParentheses
deriving Show
instance Exception MismatchedParentheses where
toException = frontendExceptionToException
fromException = frontendExceptionFromException
Теперь мы можем перехватить исключение MismatchedParentheses как MismatchedParentheses, SomeFrontendException или SomeCompilerException, но не другие типы, например IOException:
*Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: SomeFrontendException))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses `catch` \e -> putStrLn ("Caught " ++ show (e :: IOException))
*** Exception: MismatchedParentheses
Минимальное полное определение
Nothing
Методы
toException :: e -> SomeException Исходный код
fromException :: SomeException -> Maybe e Исходный код
displayException :: e -> String Исходный код
Отобразить значение этого исключения в удобном для человека виде.
Реализация по умолчанию: show.
С версии: base-4.8.0.0
Экземпляры
| Exception SomeException | С версии: base-3.0 |
Определено в GHC.Exception.Type | |
| Exception ArithException | С версии: base-4.0.0.0 |
Определено в GHC.Exception.Type | |
| Exception ErrorCall | С версии: base-4.0.0.0 |
Определено в GHC.Exception МетодыtoException :: ErrorCall -> SomeException Исходный код fromException :: SomeException -> Maybe ErrorCall Исходный код | |
| Exception FileLockingNotSupported | |
| Exception IOException | С версии: base-4.1.0.0 |
Определено в GHC.IO.Exception МетодыtoException :: IOException -> SomeException Исходный код fromException :: SomeException -> Maybe IOException Исходный код | |
| Exception ExitCode | С версии: base-4.1.0.0 |
Определено в GHC.IO.Exception МетодыtoException :: ExitCode -> SomeException Исходный код fromException :: SomeException -> Maybe ExitCode Исходный код | |
Определено в Data.Dynamic МетодыtoException :: Dynamic -> SomeException Исходный код fromException :: SomeException -> Может быть Dynamic Исходный код | |
| Исключение NestedAtomically | С момента: base-4.0 |
Определено в Control.Exception.Base | |
| Исключение NonTermination | С момента: base-4.0 |
Определено в Control.Exception.Base | |
| Исключение TypeError | С момента: base-4.9.0.0 |
Определено в Control.Exception.Base МетодыtoException :: TypeError -> SomeException Исходный код fromException :: SomeException -> Может быть TypeError Исходный код | |
| Исключение NoMethodError | С момента: base-4.0 |
Определено в Control.Exception.Base | |
| Исключение RecUpdError | С момента: base-4.0 |
Определено в Control.Exception.Base МетодыtoException :: RecUpdError -> SomeException Источник fromException :: SomeException -> Возможно RecUpdError Источник | |
| Исключение RecConError | С момента: base-4.0 |
Определено в Control.Exception.Base МетодыtoException :: RecConError -> SomeException Источник fromException :: SomeException -> Возможно RecConError Источник | |
| Исключение RecSelError | С момента: base-4.0 |
Определено в Control.Exception.Base МетодыtoException :: RecSelError -> SomeException Источник fromException :: SomeException -> Возможно RecSelError Источник | |
| Исключение PatternMatchFail | С момента: base-4.0 |
Определено в Control.Exception.Base | |
| Исключение Timeout | С момента: base-4.7.0.0 |
Определено в System.Timeout МетодыtoException :: Timeout -> SomeException Источник | |
| Исключение Void | С момента: base-4.8.0.0 |
Определено в Data.Void МетодыtoException :: Void -> SomeException Исходный код |
data SomeException Исходный код
Тип SomeException — корень иерархии типов исключений. При возникновении исключения типа e, оно инкапсулируется в SomeException.
Конструкторы
| forall e.Exception e => SomeException e |
Экземпляры
| Show SomeException | С момента: base-3.0 |
Определено в GHC.Exception.Type МетодыshowsPrec :: Int -> SomeException -> ShowS Исходный код show :: SomeException -> String Исходный код showList :: [SomeException] -> ShowS Исходный код | |
| Exception SomeException | С момента: base-3.0 |
Определено в GHC.Exception.Type | |
data ArithException Исходный код
Исключения арифметических операций.
Конструкторы
| Overflow | |
| Underflow | |
| LossOfPrecision | |
| DivideByZero | |
| Denormal | |
| RatioZeroDenominator | С момента: base-4.6.0.0 |
Примеры реализации
divZeroException :: SomeException Исходный код
overflowException :: SomeException Исходный код
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-Exception-Type.html