{-# LANGUAGE CPP #-} {-# LANGUAGE TypeApplications #-} module Ouroboros.Consensus.Util.Assert (assertWithMsg) where import GHC.Stack (HasCallStack) import Ouroboros.Consensus.Util.RedundantConstraints assertWithMsg :: HasCallStack => Either String () -> a -> a #if ENABLE_ASSERTIONS assertWithMsg :: forall a. HasCallStack => Either String () -> a -> a assertWithMsg (Left String msg) a _ = String -> a forall a. HasCallStack => String -> a error String msg #endif assertWithMsg Either String () _ a a = a a where () _ = Proxy HasCallStack -> () forall (c :: Constraint) (proxy :: Constraint -> *). c => proxy c -> () keepRedundantConstraint (forall {k} (t :: k). Proxy t forall (t :: Constraint). Proxy t Proxy @HasCallStack)