    \begin{code}
    {-# OPTIONS_GHC -XNoImplicitPrelude #-}
    {-# OPTIONS_HADDOCK hide #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  GHC.Err
    -- Copyright   :  (c) The University of Glasgow, 1994-2002
    -- License     :  see libraries/base/LICENSE
    --
    -- Maintainer  :  cvs-ghc@haskell.org
    -- Stability   :  internal
    -- Portability :  non-portable (GHC extensions)
    --
    -- The "GHC.Err" module defines the code for the wired-in error functions,
    -- which have a special type in the compiler (with \"open tyvars\").
    --
    -- We cannot define these functions in a module where they might be used
    -- (e.g., "GHC.Base"), because the magical wired-in type will get confused
    -- with what the typechecker figures out.
    --
    -----------------------------------------------------------------------------

    -- #hide
    module GHC.Err
           (
             absentErr                 -- :: a
           , divZeroError              -- :: a
           , overflowError             -- :: a

           , error                     -- :: String -> a

           , undefined                 -- :: a
           ) where

    #ifndef __HADDOCK__
    import GHC.Types
    import GHC.Exception
    #endif
    \end{code}

    %*********************************************************
    %*                                                      *
    \subsection{Error-ish functions}
    %*                                                      *
    %*********************************************************

    \begin{code}
    -- | 'error' stops execution and displays an error message.
    error :: [Char] -> a
    error s = throw (ErrorCall s)

    -- | A special case of 'error'.
    -- It is expected that compilers will recognize this and insert error
    -- messages which are more appropriate to the context in which 'undefined'
    -- appears.

    undefined :: a
    undefined =  error "Prelude.undefined"
    \end{code}

    %*********************************************************
    %*                                                       *
    \subsection{Compiler generated errors + local utils}
    %*                                                       *
    %*********************************************************

    Used for compiler-generated error message;
    encoding saves bytes of string junk.

    \begin{code}
    absentErr :: a

    absentErr = error "Oops! The program has entered an `absent' argument!\n"
    \end{code}

    Divide by zero and arithmetic overflow.
    We put them here because they are needed relatively early
    in the libraries before the Exception type has been defined yet.

    \begin{code}
    {-# NOINLINE divZeroError #-}
    divZeroError :: a
    divZeroError = throw DivideByZero

    {-# NOINLINE overflowError #-}
    overflowError :: a
    overflowError = throw Overflow
    \end{code}