{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UnicodeSyntax #-}

module Control.Monad.Trace.Class
( MonadTrace(..)
) where

import Data.Sequence

-- | A class for monads that have a scoped tracing effect
class MonadTrace t m | m → t where
  -- | Add a tag or breadcrumb to a scope
  traceScope
    ∷ t
    → m α
    → m α

  -- | Realize your own trace
  readTrace
    ∷ m (Seq t)