BPS-0.1.0.0: src/main/haskell/lib/Data/TMS/ChooseDebugging.hs
{-# LANGUAGE TemplateHaskell, KindSignatures, RankNTypes #-}
{-|
Module : ChooseDebugging
Description : The main switch for activating tracing messages for debugging in output.
Copyright : (c) John Maraist, 2022
License : AllRightsReserved
Maintainer : haskell-tms@maraist.org
Stability : experimental
Portability : POSIX
The module contains the flag which indicates whether debugging output
should be compiled into modules using this system for runtime trace
output.
-}
module Data.TMS.ChooseDebugging (debuggingOn, debugging) where
import Language.Haskell.TH
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.ST.Trans
import Control.Monad.Trans.Class
import Control.Monad.Trans.Free
import Control.Monad.Trans.Identity
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Reader
import Control.Monad.Trans.Resource
import Control.Monad.Trans.State.Strict
import qualified Control.Monad.Trans.State.Lazy as SL
import qualified Control.Monad.Trans.Writer.Lazy as WL
import qualified Control.Monad.Trans.Writer.Strict as WS
-- | Flag which indicates whether debugging output should be compiled
-- into modules using this system for runtime trace output.
debuggingOn = False
unitQ :: Q Exp
{-# INLINE unitQ #-}
unitQ = [| return () |]
monadIOQ = ''MonadIO
monadQ = ''Monad
-- | Macro which expands to definitions which either print debugging
-- statements, or do nothing.
debugging :: Q [Dec]
debugging = if debuggingOn
then [d| class MonadIO m => Debuggable m
instance MonadIO m => Debuggable m
dbg :: Q Exp -> Q Exp
{-# INLINE dbg #-}
dbg exp = exp
|]
else [d| class Monad m => Debuggable m
instance Monad m => Debuggable m
dbg :: a -> Q Exp
{-# INLINE dbg #-}
dbg _ = unitQ
|]