debuggable-0.1.0: demo/Demo/Callback.hs
module Demo.Callback (
withoutDebuggable
, useDebuggable
) where
import GHC.Stack
import Debug.NonInterleavedIO.Scoped qualified as Scoped
import Debug.Provenance.Callback
import Debug.Provenance.Scope
{-------------------------------------------------------------------------------
Without the library
-------------------------------------------------------------------------------}
f1 :: HasCallStack => (Int -> IO ()) -> IO ()
f1 k = f2 k
f2 :: HasCallStack => (Int -> IO ()) -> IO ()
f2 k = scoped $ k 1
g1 :: HasCallStack => Int -> IO ()
g1 n = g2 n
g2 :: HasCallStack => Int -> IO ()
g2 n = Scoped.putStrLn $ "n = " ++ show n ++ " at " ++ prettyCallStack callStack
withoutDebuggable :: HasCallStack => IO ()
withoutDebuggable = f1 g1
{-------------------------------------------------------------------------------
Using the library
-------------------------------------------------------------------------------}
h1 :: HasCallStack => Callback IO Int () -> IO ()
h1 k = h2 k
h2 :: HasCallStack => Callback IO Int () -> IO ()
h2 k = scoped $ invokeCallback k 1
useDebuggable :: HasCallStack => IO ()
useDebuggable = h1 (callback g1)