Update base for new Safe Haskell design
[ghc.git] / libraries / base / GHC / Err.lhs
1 \begin{code}
2 {-# LANGUAGE Trustworthy #-}
3 {-# LANGUAGE CPP, NoImplicitPrelude #-}
4 {-# OPTIONS_HADDOCK hide #-}
5
6 -----------------------------------------------------------------------------
7 -- |
8 -- Module      :  GHC.Err
9 -- Copyright   :  (c) The University of Glasgow, 1994-2002
10 -- License     :  see libraries/base/LICENSE
11 -- 
12 -- Maintainer  :  cvs-ghc@haskell.org
13 -- Stability   :  internal
14 -- Portability :  non-portable (GHC extensions)
15 --
16 -- The "GHC.Err" module defines the code for the wired-in error functions,
17 -- which have a special type in the compiler (with \"open tyvars\").
18 -- 
19 -- We cannot define these functions in a module where they might be used
20 -- (e.g., "GHC.Base"), because the magical wired-in type will get confused
21 -- with what the typechecker figures out.
22 -- 
23 -----------------------------------------------------------------------------
24
25 -- #hide
26 module GHC.Err
27        (
28          absentErr                 -- :: a
29        , divZeroError              -- :: a
30        , overflowError             -- :: a
31
32        , error                     -- :: String -> a
33
34        , undefined                 -- :: a
35        ) where
36
37 #ifndef __HADDOCK__
38 import GHC.Types
39 import GHC.Exception
40 #endif
41 \end{code}
42
43 %*********************************************************
44 %*                                                      *
45 \subsection{Error-ish functions}
46 %*                                                      *
47 %*********************************************************
48
49 \begin{code}
50 -- | 'error' stops execution and displays an error message.
51 error :: [Char] -> a
52 error s = throw (ErrorCall s)
53
54 -- | A special case of 'error'.
55 -- It is expected that compilers will recognize this and insert error
56 -- messages which are more appropriate to the context in which 'undefined'
57 -- appears. 
58
59 undefined :: a
60 undefined =  error "Prelude.undefined"
61 \end{code}
62
63 %*********************************************************
64 %*                                                       *
65 \subsection{Compiler generated errors + local utils}
66 %*                                                       *
67 %*********************************************************
68
69 Used for compiler-generated error message;
70 encoding saves bytes of string junk.
71
72 \begin{code}
73 absentErr :: a
74
75 absentErr = error "Oops! The program has entered an `absent' argument!\n"
76 \end{code}
77
78 Divide by zero and arithmetic overflow.
79 We put them here because they are needed relatively early
80 in the libraries before the Exception type has been defined yet.
81
82 \begin{code}
83 {-# NOINLINE divZeroError #-}
84 divZeroError :: a
85 divZeroError = throw DivideByZero
86
87 {-# NOINLINE overflowError #-}
88 overflowError :: a
89 overflowError = throw Overflow
90 \end{code}
91