base-4.0.0.0: GHC/Err.lhs
\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}