packages feed

dawgdic-0.1.0: src-trace/Data/DAWG/Trace.hs

module Data.DAWG.Trace where

import Control.Monad.Primitive (PrimMonad)
import System.IO.Unsafe
import Unsafe.Coerce (unsafeCoerce)

import qualified Data.Vector.Hashtables as HT

traceIO :: PrimMonad m => String -> m ()
traceIO str = HT.unsafeIOToPrim . putStrLn $ str

traceWith :: forall a b m. PrimMonad m => (b -> IO ()) -> a -> m ()
traceWith action a = (HT.unsafeIOToPrim . action . unsafeCoerce) a

tracePure :: String -> a -> a
tracePure str a = unsafePerformIO do
  traceIO str
  pure $! a