packages feed

hw-polysemy-0.1.0.0: src/HaskellWorks/Polysemy/Hedgehog/Effect/Log.hs

module HaskellWorks.Polysemy.Hedgehog.Effect.Log
  ( interpretDataLogHedgehog
  , getLogEntryCallStack
  ) where

import qualified Data.Text                                      as Text
import qualified GHC.Stack                                      as GHC
import           HaskellWorks.Polysemy.Prelude

import           HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog
import           HaskellWorks.Polysemy.Hedgehog.Jot
import           Polysemy
import           Polysemy.Log

interpretDataLogHedgehog :: ()
  => Member Hedgehog r
  => (a -> Text)
  -> (a -> GHC.CallStack)
  -> InterpreterFor (DataLog a) r
interpretDataLogHedgehog fmt cs sem = do
  interpretDataLog (\a -> jotWithCallstack (cs a) $ Text.unpack $ fmt a) sem
{-# inline interpretDataLogHedgehog #-}

getLogEntryCallStack :: LogEntry LogMessage -> GHC.CallStack
getLogEntryCallStack = \case
  LogEntry _ _ cs -> cs