    {-# LANGUAGE MagicHash #-}
    {-# LANGUAGE UnboxedTuples #-}
    {-# LANGUAGE NoImplicitPrelude #-}

    -- | Primitive exceptions.
    --
    -- Users should not import this module.  It is GHC internal only.
    module GHC.Prim.Exception
       ( raiseOverflow
       , raiseUnderflow
       , raiseDivZero
       )
    where

    import GHC.Prim
    import GHC.Types ()

    default () -- Double and Integer aren't available yet

    -- Note [Arithmetic exceptions]
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- ghc-prim provides several functions to raise arithmetic exceptions
    -- (raiseDivZero, raiseUnderflow, raiseOverflow) that are wired-in the RTS.
    -- These exceptions are meant to be used by the package implementing arbitrary
    -- precision numbers (Natural,Integer). It can't depend on `base` package to
    -- raise exceptions in a normal way because it would create a dependency
    -- cycle (base <-> bignum package). See #14664
    --
    -- See also: Note [Wired-in exceptions are not CAFfy] in GHC.Core.Make.

    -- | Raise 'GHC.Exception.Type.overflowException'
    raiseOverflow :: a
    raiseOverflow :: forall a. a
    raiseOverflow = (# #) -> a
    forall b. (# #) -> b
    raiseOverflow# (# #)

    -- | Raise 'GHC.Exception.Type.underflowException'
    raiseUnderflow :: a
    raiseUnderflow :: forall a. a
    raiseUnderflow = (# #) -> a
    forall b. (# #) -> b
    raiseUnderflow# (# #)

    -- | Raise 'GHC.Exception.Type.divZeroException'
    raiseDivZero :: a
    raiseDivZero :: forall a. a
    raiseDivZero = (# #) -> a
    forall b. (# #) -> b
    raiseDivZero# (# #)