-- | Utilities for debugging module Control.Effect.Debug where import Control.Effect.Carrier import GHC.TypeLits -- Type family needed to delay the TypeError until when 'debugEffects' -- is used. type family DebugEffects (m :: * -> *) :: k where DebugEffects m = TypeError ( 'Text "Control.Effect.Debug.debugEffects" ':$$: 'Text "Derivs: " ':<>: 'ShowType (Derivs m) ':$$: 'Text "Prims: " ':<>: 'ShowType (Prims m) ':$$: 'Text "Carrier is:" ':$$: 'Text "\t" ':<>: 'ShowType m ) -- | A placeholder action of @m@ that causes a compile-time error -- that tells you the derived and primitive effects of @m@. -- -- Doesn't work when @m@ is polymorphic. debugEffects :: DebugEffects m => m a debugEffects = errorWithoutStackTrace "debugEffects: impossible"