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)