lude

Haskell prelude alternative
git clone git://git.rr3.xyz/lude | git clone gits://git.rr3.xyz/lude
Log | Files | Refs | README | LICENSE

Exception.hs (1052B)


      1 {-# LANGUAGE ImplicitParams #-}
      2 
      3 module Lude.Haskell.Exception (
      4     module X,
      5     --
      6     withFrozenCallStack,
      7     raise,
      8     unsafe_raise,
      9 ) where
     10 
     11 import Control.Exception as X (Exception (..))
     12 import GHC.Stack as X (HasCallStack)
     13 
     14 import Control.Exception qualified as Base
     15 import GHC.Stack qualified as GHC
     16 
     17 import Lude.Haskell.Core
     18 import Lude.Haskell.Partial
     19 import Lude.Haskell.Type
     20 
     21 --------------------------------------------------------------------------------
     22 
     23 -- | Representation-polymorphic version of @GHC.Stack.withFrozenCallStack@
     24 withFrozenCallStack :: forall {r :: Repr} (a :: Type# r). (HasCallStack) => ((HasCallStack) => a) -> a
     25 withFrozenCallStack k = k where ?callStack = GHC.freezeCallStack (GHC.popCallStack GHC.callStack)
     26 
     27 raise :: forall (e :: Type) {r :: Repr} (a :: Type# r). (HasCallStack, Exception e, Partial) => e -> a
     28 raise = withFrozenCallStack Base.throw
     29 
     30 unsafe_raise :: forall (e :: Type) {r :: Repr} (a :: Type# r). (HasCallStack, Exception e) => e -> a
     31 unsafe_raise = withFrozenCallStack (unsafe_partial raise)