    {-# LANGUAGE Trustworthy #-}
    {-# LANGUAGE NoImplicitPrelude, MagicHash #-}
    {-# 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.
    --
    -----------------------------------------------------------------------------

    module GHC.Err( absentErr, error, undefined ) where
    import GHC.CString ()
    import GHC.Types
    import GHC.Prim
    import GHC.Integer ()   -- Make sure Integer is compiled first
                            -- because GHC depends on it in a wired-in way
                            -- so the build system doesn't see the dependency
    import {-# SOURCE #-} GHC.Exception( errorCallException )

    -- | 'error' stops execution and displays an error message.
    error :: [Char] -> a
    error s = raise# (errorCallException 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"

    -- | Used for compiler-generated error message;
    -- encoding saves bytes of string junk.
    absentErr :: a
    absentErr = error "Oops! The program has entered an `absent' argument!\n"