packages feed

effectful-zoo 0.0.3.1 → 0.0.4.0

raw patch · 33 files changed

+577/−675 lines, 33 files

Files

components/amazonka/Effectful/Zoo/Amazonka/Api/Run.hs view
@@ -22,7 +22,7 @@ import Effectful.Zoo.Core import Effectful.Zoo.DataLog.Api import Effectful.Zoo.DataLog.Data.LogEntry-import Effectful.Zoo.DataLog.Dynamic+import Effectful.Zoo.DataLog.Static import Effectful.Zoo.Log.Data.LogMessage import Effectful.Zoo.Log.Data.Severity import HaskellWorks.Prelude
components/amazonka/Effectful/Zoo/Amazonka/Api/Send.hs view
@@ -18,7 +18,7 @@ import Effectful.Zoo.Amazonka.Dynamic import Effectful.Zoo.Core import Effectful.Zoo.DataLog.Api-import Effectful.Zoo.DataLog.Dynamic+import Effectful.Zoo.DataLog.Static import Effectful.Zoo.Lazy.Dynamic import GHC.Stack qualified as GHC import HaskellWorks.Prelude
components/amazonka/Effectful/Zoo/Amazonka/Static.hs view
@@ -20,7 +20,7 @@ import Effectful.Zoo.Amazonka.Data import Effectful.Zoo.Core import Effectful.Zoo.DataLog.Api-import Effectful.Zoo.DataLog.Dynamic+import Effectful.Zoo.DataLog.Static import Effectful.Zoo.Lazy.Dynamic import GHC.Stack qualified as GHC import HaskellWorks.Prelude
components/core/Effectful/Zoo/DataLog/Api.hs view
@@ -5,63 +5,5 @@     putJsonStdout,   ) where -import Data.Aeson (Value, object, (.=))-import Data.Aeson qualified as J-import Data.ByteString.Lazy qualified as LBS-import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Dispatch.Static-import Effectful.Zoo.Core-import Effectful.Zoo.DataLog.Data.LogEntry-import Effectful.Zoo.DataLog.Dynamic-import Effectful.Zoo.Log.Data.LogMessage-import GHC.Stack qualified as GHC-import HaskellWorks.Prelude-import System.IO qualified as IO--dataLog :: forall i r. ()-  => HasCallStack-  => r <: DataLog i-  => i-  -> Eff r ()-dataLog i =-  withFrozenCallStack do-    send $ DataLog i--logEntryToJson :: forall a. ()-  => (a -> Value)-  -> LogEntry a-  -> Value-logEntryToJson aToJson (LogEntry value time callstack) =-    object-      [ "time" .= time-      , "data" .= aToJson value-      , "callstack" .= fmap callsiteToJson (GHC.getCallStack callstack)-      ]-    where-      callsiteToJson :: ([Char], GHC.SrcLoc) -> Value-      callsiteToJson (caller, srcLoc) =-        object-          [ "caller"    .= caller-          , "package"   .= GHC.srcLocPackage srcLoc-          , "module"    .= GHC.srcLocModule srcLoc-          , "file"      .= GHC.srcLocFile srcLoc-          , "startLine" .= GHC.srcLocStartLine srcLoc-          , "startCol"  .= GHC.srcLocStartCol srcLoc-          , "endLine"   .= GHC.srcLocEndLine srcLoc-          , "endCol"    .= GHC.srcLocEndCol srcLoc-          ]--logMessageToJson :: LogMessage Text -> Value-logMessageToJson (LogMessage severity message) =-    object-      [ "severity" .= show severity-      , "message"  .= message-      ]--putJsonStdout :: ()-  => Value-  -> Eff r ()-putJsonStdout value = do-  unsafeEff_ $ LBS.putStr $ J.encode value <> "\n"-  unsafeEff_ $ IO.hFlush IO.stdout+import Effectful.Zoo.DataLog.Static+import Effectful.Zoo.DataLog.Api.Json
+ components/core/Effectful/Zoo/DataLog/Api/Json.hs view
@@ -0,0 +1,54 @@+module Effectful.Zoo.DataLog.Api.Json+  ( logEntryToJson,+    logMessageToJson,+    putJsonStdout,+  ) where++import Data.Aeson (Value, object, (.=))+import Data.Aeson qualified as J+import Data.ByteString.Lazy qualified as LBS+import Effectful+import Effectful.Dispatch.Static+import Effectful.Zoo.DataLog.Data.LogEntry+import Effectful.Zoo.Log.Data.LogMessage+import GHC.Stack qualified as GHC+import HaskellWorks.Prelude+import System.IO qualified as IO++logEntryToJson :: forall a. ()+  => (a -> Value)+  -> LogEntry a+  -> Value+logEntryToJson aToJson (LogEntry value time callstack) =+    object+      [ "time" .= time+      , "data" .= aToJson value+      , "callstack" .= fmap callsiteToJson (GHC.getCallStack callstack)+      ]+    where+      callsiteToJson :: ([Char], GHC.SrcLoc) -> Value+      callsiteToJson (caller, srcLoc) =+        object+          [ "caller"    .= caller+          , "package"   .= GHC.srcLocPackage srcLoc+          , "module"    .= GHC.srcLocModule srcLoc+          , "file"      .= GHC.srcLocFile srcLoc+          , "startLine" .= GHC.srcLocStartLine srcLoc+          , "startCol"  .= GHC.srcLocStartCol srcLoc+          , "endLine"   .= GHC.srcLocEndLine srcLoc+          , "endCol"    .= GHC.srcLocEndCol srcLoc+          ]++logMessageToJson :: LogMessage Text -> Value+logMessageToJson (LogMessage severity message) =+    object+      [ "severity" .= show severity+      , "message"  .= message+      ]++putJsonStdout :: ()+  => Value+  -> Eff r ()+putJsonStdout value = do+  unsafeEff_ $ LBS.putStr $ J.encode value <> "\n"+  unsafeEff_ $ IO.hFlush IO.stdout
components/core/Effectful/Zoo/DataLog/Dynamic.hs view
@@ -1,31 +1,8 @@ module Effectful.Zoo.DataLog.Dynamic   ( DataLog (..),     runDataLog,+    dataLog,   ) where -import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Zoo.DataLog.Static qualified as S-import HaskellWorks.Prelude--data DataLog a :: Effect where-  DataLog-    :: a-    -> DataLog a m ()--  Local-    :: (a -> a)-    -> m b-    -> DataLog a m b--type instance DispatchOf (DataLog a) = Dynamic--runDataLog :: ()-  => HasCallStack-  => (HasCallStack => i -> Eff r ())-  -> Eff (DataLog i : r) a-  -> Eff r a-runDataLog run =-  reinterpret (S.runDataLog run) $ \env -> \case-    DataLog i -> S.log i-    Local f m -> localSeqUnlift env $ \unlift -> S.local f (unlift m)+import Effectful.Zoo.DataLog.Dynamic.Api+import Effectful.Zoo.DataLog.Dynamic.Effect
+ components/core/Effectful/Zoo/DataLog/Dynamic/Api.hs view
@@ -0,0 +1,18 @@+module Effectful.Zoo.DataLog.Dynamic.Api+  ( dataLog,+  ) where++import Effectful+import Effectful.Dispatch.Dynamic+import Effectful.Zoo.Core+import Effectful.Zoo.DataLog.Dynamic.Effect+import HaskellWorks.Prelude++dataLog :: forall i r. ()+  => HasCallStack+  => r <: DataLog i+  => i+  -> Eff r ()+dataLog i =+  withFrozenCallStack do+    send $ DataLog i
+ components/core/Effectful/Zoo/DataLog/Dynamic/Effect.hs view
@@ -0,0 +1,31 @@+module Effectful.Zoo.DataLog.Dynamic.Effect+  ( DataLog (..),+    runDataLog,+  ) where++import Effectful+import Effectful.Dispatch.Dynamic+import Effectful.Zoo.DataLog.Static qualified as S+import HaskellWorks.Prelude++data DataLog a :: Effect where+  DataLog+    :: a+    -> DataLog a m ()++  Local+    :: (a -> a)+    -> m b+    -> DataLog a m b++type instance DispatchOf (DataLog a) = Dynamic++runDataLog :: ()+  => HasCallStack+  => (HasCallStack => i -> Eff r ())+  -> Eff (DataLog i : r) a+  -> Eff r a+runDataLog run =+  reinterpret (S.runDataLog run) $ \env -> \case+    DataLog i -> S.dataLog i+    Local f m -> localSeqUnlift env $ \unlift -> S.localDataLog f (unlift m)
components/core/Effectful/Zoo/DataLog/Static.hs view
@@ -4,97 +4,11 @@     runDataLogTextToHandle,     runDataLogTextToStdout,     runDataLogTextToStderr,+    getDataLogger,     withDataLog,-    log,-    local,+    dataLog,+    localDataLog,   ) where -import Data.Text.IO qualified as T-import Data.Kind-import Effectful-import Effectful.Zoo.Core-import Effectful.Dispatch.Static-import Effectful.Zoo.DataLog.Data.DataLogger-import HaskellWorks.Prelude-import System.IO qualified as IO--data DataLog (i :: Type) :: Effect--type instance DispatchOf (DataLog i) = Static NoSideEffects--newtype instance StaticRep (DataLog i) = DataLog (DataLogger i)--runDataLog :: forall i a r. ()-  => HasCallStack-  => (HasCallStack => i -> Eff r ())-  -> Eff (DataLog i : r) a-  -> Eff r a-runDataLog run f = do-  s <- mkDataLogger run-  evalStaticRep (DataLog s) f--runDataLogTextToHandle :: ()-  => HasCallStack-  => Handle-  -> Eff (DataLog Text : r) a-  -> Eff r a-runDataLogTextToHandle h =-  evalStaticRep $ DataLog $ DataLogger $ T.hPutStrLn h--runDataLogTextToStdout :: ()-  => HasCallStack-  => Eff (DataLog Text : r) a-  -> Eff r a-runDataLogTextToStdout =-  runDataLogTextToHandle IO.stdout--runDataLogTextToStderr :: ()-  => HasCallStack-  => Eff (DataLog Text : r) a-  -> Eff r a-runDataLogTextToStderr =-  runDataLogTextToHandle IO.stderr--withDataLogSerialiser :: ()-  => HasCallStack-  => (DataLogger i -> DataLogger o)-  -> Eff (DataLog o : r) a-  -> Eff (DataLog i : r) a-withDataLogSerialiser f m = do-  logger <- getDataLogger-  let _ = logger-  raise $ evalStaticRep (DataLog (f logger)) m--withDataLog :: ()-  => HasCallStack-  => (o -> i)-  -> Eff (DataLog o : r) a-  -> Eff (DataLog i : r) a-withDataLog =-  withDataLogSerialiser . contramap--getDataLogger :: ()-  => HasCallStack-  => r <: DataLog i-  => Eff r (DataLogger i)-getDataLogger = do-  DataLog i <- getStaticRep-  pure i--log :: ()-  => HasCallStack-  => r <: DataLog i-  => i-  -> Eff r ()-log i = do-  dataLogger <- getDataLogger-  unsafeEff_ $ dataLogger.run i--local :: ()-  => HasCallStack-  => r <: DataLog i-  => (i -> i)-  -> Eff r a-  -> Eff r a-local f =-  localStaticRep $ \(DataLog s) -> DataLog (contramap f s)+import Effectful.Zoo.DataLog.Static.Api+import Effectful.Zoo.DataLog.Static.Effect
+ components/core/Effectful/Zoo/DataLog/Static/Api.hs view
@@ -0,0 +1,19 @@+module Effectful.Zoo.DataLog.Static.Api+  ( dataLog,+  ) where++import Effectful+import Effectful.Dispatch.Static+import Effectful.Zoo.Core+import Effectful.Zoo.DataLog.Data.DataLogger+import Effectful.Zoo.DataLog.Static.Effect+import HaskellWorks.Prelude++dataLog :: forall i r. ()+  => HasCallStack+  => r <: DataLog i+  => i+  -> Eff r ()+dataLog i = do+  dataLogger <- getDataLogger+  unsafeEff_ $ dataLogger.run i
+ components/core/Effectful/Zoo/DataLog/Static/Effect.hs view
@@ -0,0 +1,91 @@+module Effectful.Zoo.DataLog.Static.Effect+  ( DataLog,+    runDataLog,+    runDataLogTextToHandle,+    runDataLogTextToStdout,+    runDataLogTextToStderr,+    getDataLogger,+    withDataLog,+    localDataLog,+  ) where++import Data.Text.IO qualified as T+import Data.Kind+import Effectful+import Effectful.Zoo.Core+import Effectful.Dispatch.Static+import Effectful.Zoo.DataLog.Data.DataLogger+import HaskellWorks.Prelude+import System.IO qualified as IO++data DataLog (i :: Type) :: Effect++type instance DispatchOf (DataLog i) = Static NoSideEffects++newtype instance StaticRep (DataLog i) = DataLog (DataLogger i)++runDataLog :: forall i a r. ()+  => HasCallStack+  => (HasCallStack => i -> Eff r ())+  -> Eff (DataLog i : r) a+  -> Eff r a+runDataLog run f = do+  s <- mkDataLogger run+  evalStaticRep (DataLog s) f++runDataLogTextToHandle :: ()+  => HasCallStack+  => Handle+  -> Eff (DataLog Text : r) a+  -> Eff r a+runDataLogTextToHandle h =+  evalStaticRep $ DataLog $ DataLogger $ T.hPutStrLn h++runDataLogTextToStdout :: ()+  => HasCallStack+  => Eff (DataLog Text : r) a+  -> Eff r a+runDataLogTextToStdout =+  runDataLogTextToHandle IO.stdout++runDataLogTextToStderr :: ()+  => HasCallStack+  => Eff (DataLog Text : r) a+  -> Eff r a+runDataLogTextToStderr =+  runDataLogTextToHandle IO.stderr++withDataLogSerialiser :: ()+  => HasCallStack+  => (DataLogger i -> DataLogger o)+  -> Eff (DataLog o : r) a+  -> Eff (DataLog i : r) a+withDataLogSerialiser f m = do+  logger <- getDataLogger+  let _ = logger+  raise $ evalStaticRep (DataLog (f logger)) m++withDataLog :: ()+  => HasCallStack+  => (o -> i)+  -> Eff (DataLog o : r) a+  -> Eff (DataLog i : r) a+withDataLog =+  withDataLogSerialiser . contramap++getDataLogger :: ()+  => HasCallStack+  => r <: DataLog i+  => Eff r (DataLogger i)+getDataLogger = do+  DataLog i <- getStaticRep+  pure i++localDataLog :: ()+  => HasCallStack+  => r <: DataLog i+  => (i -> i)+  -> Eff r a+  -> Eff r a+localDataLog f =+  localStaticRep $ \(DataLog s) -> DataLog (contramap f s)
components/core/Effectful/Zoo/FileSystem.hs view
@@ -33,8 +33,7 @@ import Effectful.Zoo.Core import Effectful.Zoo.Error.Static import Effectful.Zoo.Exception-import Effectful.Zoo.Log.Api.Text-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import Effectful.Zoo.Unsafe import HaskellWorks.Error.Types.JsonDecodeError import HaskellWorks.Error.Types.YamlDecodeError
components/core/Effectful/Zoo/Log/Api.hs view
@@ -10,4 +10,4 @@   ) where  import Effectful.Zoo.Log.Api.Render-import Effectful.Zoo.Log.Api.Text+import Effectful.Zoo.Log.Static.Api
− components/core/Effectful/Zoo/Log/Api/Generic.hs
@@ -1,81 +0,0 @@-module Effectful.Zoo.Log.Api.Generic-  ( log,-    trace,-    debug,-    info,-    warn,-    error,-    crit,-  ) where--import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Zoo.Core-import Effectful.Zoo.Log.Data.LogMessage-import Effectful.Zoo.Log.Data.Severity-import Effectful.Zoo.Log.Dynamic-import HaskellWorks.Prelude--log :: ()-  => HasCallStack-  => r <: Log i-  => Severity-  -> i-  -> Eff r ()-log severity message =-  withFrozenCallStack $-    send (Log (LogMessage severity message))--trace :: ()-  => HasCallStack-  => r <: Log i-  => i-  -> Eff r ()-trace =-  withFrozenCallStack $-    log Trace--debug :: ()-  => HasCallStack-  => r <: Log i-  => i-  -> Eff r ()-debug =-  withFrozenCallStack $-    log Debug--info :: ()-  => HasCallStack-  => r <: Log i-  => i-  -> Eff r ()-info =-  withFrozenCallStack $-    log Info--warn :: ()-  => HasCallStack-  => r <: Log i-  => i-  -> Eff r ()-warn =-  withFrozenCallStack $-    log Warn--error :: ()-  => HasCallStack-  => r <: Log i-  => i-  -> Eff r ()-error =-  withFrozenCallStack $-    log Error--crit :: ()-  => HasCallStack-  => r <: Log i-  => i-  -> Eff r ()-crit =-  withFrozenCallStack $-    log Crit
− components/core/Effectful/Zoo/Log/Api/LazyText.hs
@@ -1,81 +0,0 @@-module Effectful.Zoo.Log.Api.LazyText-  ( log,-    trace,-    debug,-    info,-    warn,-    error,-    crit,-  ) where--import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Zoo.Core-import Effectful.Zoo.Log.Data.LogMessage-import Effectful.Zoo.Log.Data.Severity-import Effectful.Zoo.Log.Dynamic-import HaskellWorks.Prelude--log :: ()-  => HasCallStack-  => r <: Log LazyText-  => Severity-  -> LazyText-  -> Eff r ()-log severity message =-  withFrozenCallStack $-    send (Log (LogMessage severity message))--trace :: ()-  => HasCallStack-  => r <: Log LazyText-  => LazyText-  -> Eff r ()-trace =-  withFrozenCallStack $-    log Trace--debug :: ()-  => HasCallStack-  => r <: Log LazyText-  => LazyText-  -> Eff r ()-debug =-  withFrozenCallStack $-    log Debug--info :: ()-  => HasCallStack-  => r <: Log LazyText-  => LazyText-  -> Eff r ()-info =-  withFrozenCallStack $-    log Info--warn :: ()-  => HasCallStack-  => r <: Log LazyText-  => LazyText-  -> Eff r ()-warn =-  withFrozenCallStack $-    log Warn--error :: ()-  => HasCallStack-  => r <: Log LazyText-  => LazyText-  -> Eff r ()-error =-  withFrozenCallStack $-    log Error--crit :: ()-  => HasCallStack-  => r <: Log LazyText-  => LazyText-  -> Eff r ()-crit =-  withFrozenCallStack $-    log Crit
− components/core/Effectful/Zoo/Log/Api/String.hs
@@ -1,81 +0,0 @@-module Effectful.Zoo.Log.Api.String-  ( log,-    trace,-    debug,-    info,-    warn,-    error,-    crit,-  ) where--import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Zoo.Core-import Effectful.Zoo.Log.Data.LogMessage-import Effectful.Zoo.Log.Data.Severity-import Effectful.Zoo.Log.Dynamic-import HaskellWorks.Prelude--log :: ()-  => HasCallStack-  => r <: Log String-  => Severity-  -> String-  -> Eff r ()-log severity message =-  withFrozenCallStack $-    send (Log (LogMessage severity message))--trace :: ()-  => HasCallStack-  => r <: Log String-  => String-  -> Eff r ()-trace =-  withFrozenCallStack $-    log Trace--debug :: ()-  => HasCallStack-  => r <: Log String-  => String-  -> Eff r ()-debug =-  withFrozenCallStack $-    log Debug--info :: ()-  => HasCallStack-  => r <: Log String-  => String-  -> Eff r ()-info =-  withFrozenCallStack $-    log Info--warn :: ()-  => HasCallStack-  => r <: Log String-  => String-  -> Eff r ()-warn =-  withFrozenCallStack $-    log Warn--error :: ()-  => HasCallStack-  => r <: Log String-  => String-  -> Eff r ()-error =-  withFrozenCallStack $-    log Error--crit :: ()-  => HasCallStack-  => r <: Log String-  => String-  -> Eff r ()-crit =-  withFrozenCallStack $-    log Crit
− components/core/Effectful/Zoo/Log/Api/Text.hs
@@ -1,81 +0,0 @@-module Effectful.Zoo.Log.Api.Text-  ( log,-    trace,-    debug,-    info,-    warn,-    error,-    crit,-  ) where--import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Zoo.Core-import Effectful.Zoo.Log.Data.Severity-import Effectful.Zoo.Log.Data.LogMessage-import Effectful.Zoo.Log.Dynamic-import HaskellWorks.Prelude--log :: ()-  => HasCallStack-  => r <: Log Text-  => Severity-  -> Text-  -> Eff r ()-log severity message =-  withFrozenCallStack $-    send (Log (LogMessage severity message))--trace :: ()-  => HasCallStack-  => r <: Log Text-  => Text-  -> Eff r ()-trace =-  withFrozenCallStack $-    log Trace--debug :: ()-  => HasCallStack-  => r <: Log Text-  => Text-  -> Eff r ()-debug =-  withFrozenCallStack $-    log Debug--info :: ()-  => HasCallStack-  => r <: Log Text-  => Text-  -> Eff r ()-info =-  withFrozenCallStack $-    log Info--warn :: ()-  => HasCallStack-  => r <: Log Text-  => Text-  -> Eff r ()-warn =-  withFrozenCallStack $-    log Warn--error :: ()-  => HasCallStack-  => r <: Log Text-  => Text-  -> Eff r ()-error =-  withFrozenCallStack $-    log Error--crit :: ()-  => HasCallStack-  => r <: Log Text-  => Text-  -> Eff r ()-crit =-  withFrozenCallStack $-    log Crit
components/core/Effectful/Zoo/Log/Dynamic.hs view
@@ -1,35 +1,15 @@ module Effectful.Zoo.Log.Dynamic   ( Log (..),     runLog,-  ) where -import Effectful-import Effectful.Dispatch.Dynamic-import Effectful.Zoo.Core-import Effectful.Zoo.Log.Data.LogMessage-import Effectful.Zoo.Log.Static qualified as S-import HaskellWorks.Prelude--data Log i :: Effect where-  Log-    :: HasCallStack-    => LogMessage i-    -> Log i m ()--  Local-    :: (i -> i)-    -> m a-    -> Log i m a--type instance DispatchOf (Log a) = Dynamic+    log,+    trace,+    debug,+    info,+    warn,+    error,+    crit,+  ) where -runLog :: forall i a r. ()-  => r <: IOE-  => UnliftStrategy-  -> (CallStack -> LogMessage i -> Eff r ())-  -> Eff (Log i : r) a-  -> Eff r a-runLog s run =-  reinterpret (S.runLog s run) $ \env -> \case-    Log m -> S.log m-    Local f m -> localSeqUnlift env $ \unlift -> S.local f (unlift m)+import Effectful.Zoo.Log.Dynamic.Api+import Effectful.Zoo.Log.Dynamic.Effect
+ components/core/Effectful/Zoo/Log/Dynamic/Api.hs view
@@ -0,0 +1,81 @@+module Effectful.Zoo.Log.Dynamic.Api+  ( log,+    trace,+    debug,+    info,+    warn,+    error,+    crit,+  ) where++import Effectful+import Effectful.Dispatch.Dynamic+import Effectful.Zoo.Core+import Effectful.Zoo.Log.Data.LogMessage+import Effectful.Zoo.Log.Data.Severity+import Effectful.Zoo.Log.Dynamic.Effect+import HaskellWorks.Prelude++log :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => Severity+  -> i+  -> Eff r ()+log severity message =+  withFrozenCallStack $+    send (Log (LogMessage severity message))++trace :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+trace =+  withFrozenCallStack $+    log Trace++debug :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+debug =+  withFrozenCallStack $+    log Debug++info :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+info =+  withFrozenCallStack $+    log Info++warn :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+warn =+  withFrozenCallStack $+    log Warn++error :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+error =+  withFrozenCallStack $+    log Error++crit :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+crit =+  withFrozenCallStack $+    log Crit
+ components/core/Effectful/Zoo/Log/Dynamic/Effect.hs view
@@ -0,0 +1,35 @@+module Effectful.Zoo.Log.Dynamic.Effect+  ( Log (..),+    runLog,+  ) where++import Effectful+import Effectful.Dispatch.Dynamic+import Effectful.Zoo.Core+import Effectful.Zoo.Log.Data.LogMessage+import Effectful.Zoo.Log.Static qualified as S+import HaskellWorks.Prelude++data Log i :: Effect where+  Log+    :: HasCallStack+    => LogMessage i+    -> Log i m ()++  Local+    :: (i -> i)+    -> m a+    -> Log i m a++type instance DispatchOf (Log a) = Dynamic++runLog :: forall i a r. ()+  => r <: IOE+  => UnliftStrategy+  -> (CallStack -> LogMessage i -> Eff r ())+  -> Eff (Log i : r) a+  -> Eff r a+runLog s run =+  reinterpret (S.runLog s run) $ \env -> \case+    Log m -> S.logMessage m+    Local f m -> localSeqUnlift env $ \unlift -> S.localLog f (unlift m)
components/core/Effectful/Zoo/Log/Static.hs view
@@ -5,106 +5,18 @@     runLogToStdout,     runLogToStderr,     withLog,+    logMessage,+    localLog,+     log,-    local,+    trace,+    debug,+    info,+    warn,+    error,+    crit,   ) where -import Data.Kind-import Data.Text.IO qualified as T-import Effectful-import Effectful.Dispatch.Static-import Effectful.Zoo.Core-import Effectful.Zoo.Log.Data.Logger-import Effectful.Zoo.Log.Data.LogMessage-import GHC.Stack qualified as GHC-import HaskellWorks.Prelude-import System.IO qualified as IO--data Log (i :: Type) :: Effect--type instance DispatchOf (Log i) = Static NoSideEffects--newtype instance StaticRep (Log i) = Log (Logger i)--runLog :: ()-  => r <: IOE-  => HasCallStack-  => UnliftStrategy-  -> (CallStack -> LogMessage i -> Eff r ())-  -> Eff (Log i : r) a-  -> Eff r a-runLog strategy run f = do-  s <- mkLogger strategy run-  evalStaticRep (Log s) f--runLogToHandle :: ()-  => HasCallStack-  => Handle-  -> (LogMessage a -> Text)-  -> Eff (Log a : r) a-  -> Eff r a-runLogToHandle h f =-  evalStaticRep $ Log $ Logger $ \_ m ->-    T.hPutStrLn h $ f m--runLogToStdout :: ()-  => HasCallStack-  => (LogMessage a -> Text)-  -> Eff (Log a : r) a-  -> Eff r a-runLogToStdout =-  runLogToHandle IO.stdout--runLogToStderr :: ()-  => HasCallStack-  => (LogMessage a -> Text)-  -> Eff (Log a : r) a-  -> Eff r a-runLogToStderr =-  runLogToHandle IO.stderr--withDataLogSerialiser :: ()-  => HasCallStack-  => (Logger i -> Logger o)-  -> Eff (Log o : r) a-  -> Eff (Log i : r) a-withDataLogSerialiser f m = do-  logger <- getDataLogger-  let _ = logger-  raise $ evalStaticRep (Log (f logger)) m--withLog :: ()-  => HasCallStack-  => (o -> i)-  -> Eff (Log o : r) a-  -> Eff (Log i : r) a-withLog =-  withDataLogSerialiser . contramap--getDataLogger :: ()-  => HasCallStack-  => r <: Log i-  => Eff r (Logger i)-getDataLogger = do-  Log i <- getStaticRep-  pure i--log :: ()-  => HasCallStack-  => r <: Log i-  => r <: IOE-  => LogMessage i-  -> Eff r ()-log m =-  withFrozenCallStack do-    dataLogger <- getDataLogger-    liftIO $ dataLogger.run GHC.callStack m+import Effectful.Zoo.Log.Static.Api -local :: ()-  => HasCallStack-  => r <: Log i-  => (i -> i)-  -> Eff r a-  -> Eff r a-local f =-  localStaticRep $ \(Log s) -> Log (contramap f s)+import Effectful.Zoo.Log.Static.Effect
+ components/core/Effectful/Zoo/Log/Static/Api.hs view
@@ -0,0 +1,81 @@+module Effectful.Zoo.Log.Static.Api+  ( log,+    trace,+    debug,+    info,+    warn,+    error,+    crit,+  ) where++import Effectful+import Effectful.Dispatch.Static+import Effectful.Zoo.Core+import Effectful.Zoo.Log.Data.LogMessage+import Effectful.Zoo.Log.Data.Severity+import Effectful.Zoo.Log.Static.Effect+import HaskellWorks.Prelude++log :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => Severity+  -> i+  -> Eff r ()+log severity message =+  withFrozenCallStack $+    logMessage $ LogMessage severity message++trace :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+trace =+  withFrozenCallStack $+    log Trace++debug :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+debug =+  withFrozenCallStack $+    log Debug++info :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+info =+  withFrozenCallStack $+    log Info++warn :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+warn =+  withFrozenCallStack $+    log Warn++error :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+error =+  withFrozenCallStack $+    log Error++crit :: forall i r. ()+  => HasCallStack+  => r <: Log i+  => i+  -> Eff r ()+crit =+  withFrozenCallStack $+    log Crit
+ components/core/Effectful/Zoo/Log/Static/Effect.hs view
@@ -0,0 +1,109 @@+module Effectful.Zoo.Log.Static.Effect+  ( Log,+    runLog,+    runLogToHandle,+    runLogToStdout,+    runLogToStderr,+    withLog,+    logMessage,+    localLog,+  ) where++import Data.Kind+import Data.Text.IO qualified as T+import Effectful+import Effectful.Dispatch.Static+import Effectful.Zoo.Core+import Effectful.Zoo.Log.Data.Logger+import Effectful.Zoo.Log.Data.LogMessage+import GHC.Stack qualified as GHC+import HaskellWorks.Prelude+import System.IO qualified as IO++data Log (i :: Type) :: Effect++type instance DispatchOf (Log i) = Static NoSideEffects++newtype instance StaticRep (Log i) = Log (Logger i)++runLog :: forall i a r. ()+  => r <: IOE+  => HasCallStack+  => UnliftStrategy+  -> (CallStack -> LogMessage i -> Eff r ())+  -> Eff (Log i : r) a+  -> Eff r a+runLog strategy run f = do+  s <- mkLogger strategy run+  evalStaticRep (Log s) f++runLogToHandle :: ()+  => HasCallStack+  => Handle+  -> (LogMessage a -> Text)+  -> Eff (Log a : r) a+  -> Eff r a+runLogToHandle h f =+  evalStaticRep $ Log $ Logger $ \_ m ->+    T.hPutStrLn h $ f m++runLogToStdout :: ()+  => HasCallStack+  => (LogMessage a -> Text)+  -> Eff (Log a : r) a+  -> Eff r a+runLogToStdout =+  runLogToHandle IO.stdout++runLogToStderr :: ()+  => HasCallStack+  => (LogMessage a -> Text)+  -> Eff (Log a : r) a+  -> Eff r a+runLogToStderr =+  runLogToHandle IO.stderr++withDataLogSerialiser :: ()+  => HasCallStack+  => (Logger i -> Logger o)+  -> Eff (Log o : r) a+  -> Eff (Log i : r) a+withDataLogSerialiser f m = do+  logger <- getLogger+  let _ = logger+  raise $ evalStaticRep (Log (f logger)) m++withLog :: ()+  => HasCallStack+  => (o -> i)+  -> Eff (Log o : r) a+  -> Eff (Log i : r) a+withLog =+  withDataLogSerialiser . contramap++getLogger :: ()+  => HasCallStack+  => r <: Log i+  => Eff r (Logger i)+getLogger = do+  Log i <- getStaticRep+  pure i++logMessage :: ()+  => HasCallStack+  => r <: Log i+  => LogMessage i+  -> Eff r ()+logMessage m =+  withFrozenCallStack do+    dataLogger <- getLogger+    unsafeEff_ $ dataLogger.run GHC.callStack m++localLog :: ()+  => HasCallStack+  => r <: Log i+  => (i -> i)+  -> Eff r a+  -> Eff r a+localLog f =+  localStaticRep $ \(Log s) -> Log (contramap f s)
components/hedgehog/Effectful/Zoo/Hedgehog/Api/Internal/Cabal.hs view
@@ -14,7 +14,7 @@ import Effectful.Zoo.FileSystem import Effectful.Zoo.Hedgehog.Api.Internal.Cabal.Types import Effectful.Zoo.Hedgehog.Api.Internal.FilePath-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import HaskellWorks.Error.Types import HaskellWorks.Prelude import System.FilePath (takeDirectory, (</>))
components/hedgehog/Effectful/Zoo/Hedgehog/Api/Journal.hs view
@@ -70,8 +70,8 @@ import Effectful.Concurrent import Effectful.Dispatch.Dynamic import Effectful.Zoo.Core-import Effectful.Zoo.DataLog.Dynamic-import Effectful.Zoo.DataLog.Dynamic qualified as DataLog+import Effectful.Zoo.DataLog.Static+import Effectful.Zoo.DataLog.Static qualified as DataLog import Effectful.Zoo.Error.Static import Effectful.Zoo.Hedgehog.Api.Hedgehog import Effectful.Zoo.Hedgehog.Data.PackagePath
components/hedgehog/Effectful/Zoo/Hedgehog/Api/Process.hs view
@@ -30,7 +30,7 @@ import Effectful.Zoo.Hedgehog.Api.Journal import Effectful.Zoo.Hedgehog.Api.Process.Internal import Effectful.Zoo.Hedgehog.Effect.Hedgehog-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import Effectful.Zoo.Process import GHC.Stack (callStack) import HaskellWorks.Error.Types
components/hedgehog/Effectful/Zoo/Hedgehog/Api/Workspace.hs view
@@ -23,7 +23,7 @@ import Effectful.Zoo.Hedgehog.Data.ProjectRoot import Effectful.Zoo.Hedgehog.Data.Workspace import Effectful.Zoo.Hedgehog.Effect.Hedgehog-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import HaskellWorks.Prelude import Hedgehog.Internal.Property qualified as H import System.FilePath ((</>))
components/hedgehog/Effectful/Zoo/Hedgehog/Effect/Run.hs view
@@ -28,7 +28,7 @@ import Effectful.Zoo.Hedgehog.Effect.Hedgehog import Effectful.Zoo.Hedgehog.Effect.HedgehogGen import Effectful.Zoo.Log.Data.LogMessage-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import Effectful.Zoo.Resource import HaskellWorks.Control.Monad import HaskellWorks.Prelude
components/rds-data-test/Effectful/Zoo/RdsData/Test/Cluster.hs view
@@ -35,7 +35,7 @@ import Effectful.Zoo.Amazonka.Data.AwsLogEntry import Effectful.Zoo.Amazonka.Dynamic import Effectful.Zoo.Core-import Effectful.Zoo.DataLog.Dynamic+import Effectful.Zoo.DataLog.Static import Effectful.Zoo.Error.Static import Effectful.Zoo.Hedgehog.Api.Assert import Effectful.Zoo.Hedgehog.Api.Failure@@ -77,28 +77,6 @@     sendAws createDbClusterRequest       & trapFail @AwsError       & jotShowDataLog @AwsLogEntry---  -- sendAws :: forall a r. ()-  --   => HasCallStack-  --   => AwsRequest a-  --   => r <: Amazonka-  --   => r <: DataLog AwsLogEntry-  --   => r <: Error AwsError-  --   => r <: IOE-  --   => Typeable (AwsResponse a)-  --   => Typeable a-  --   => a-  --   -> Eff r (AwsResponse a)--  -- jotShowDataLog :: forall i a r. ()-  --   => HasCallStack-  --   => Show i-  --   => r <: Concurrent-  --   => r <: Error Failure-  --   => r <: Hedgehog-  --   => Eff (DataLog i : r) a-  --   -> Eff r a    let secretName = "my-aurora-cluster" 
components/rds-data-test/Effectful/Zoo/RdsData/Test/Workspace.hs view
@@ -17,7 +17,7 @@ import Effectful.Zoo.Hedgehog.Api import Effectful.Zoo.Hedgehog.Api.Workspace import Effectful.Zoo.Hedgehog.Effect.Hedgehog-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import Effectful.Zoo.Reader.Static import HaskellWorks.Prelude 
components/rds-data/Effectful/Zoo/RdsData/Core.hs view
@@ -24,10 +24,10 @@ import Effectful.Zoo.Amazonka.Data import Effectful.Zoo.Amazonka.Dynamic import Effectful.Zoo.Core-import Effectful.Zoo.DataLog.Dynamic+import Effectful.Zoo.DataLog.Static import Effectful.Zoo.Error.Static import Effectful.Zoo.Log.Api-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import Effectful.Zoo.RdsData.Errors import HaskellWorks.Prelude import Lens.Micro
components/rds-data/Effectful/Zoo/RdsData/Migration.hs view
@@ -27,10 +27,10 @@ import Effectful.Zoo.Amazonka.Data import Effectful.Zoo.Amazonka.Dynamic import Effectful.Zoo.Core-import Effectful.Zoo.DataLog.Dynamic+import Effectful.Zoo.DataLog.Static import Effectful.Zoo.FileSystem import Effectful.Zoo.Log.Api-import Effectful.Zoo.Log.Dynamic+import Effectful.Zoo.Log.Static import Effectful.Zoo.RdsData.Core import Effectful.Zoo.RdsData.Errors import HaskellWorks.Prelude
effectful-zoo.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.4  name:                   effectful-zoo-version:                0.0.3.1+version:                0.0.4.0 synopsis:               Effectful effects for testing description:            See https://hackage.haskell.org/package/effectful-zoo/docs/effectful-zoo.html category:               Development@@ -150,10 +150,15 @@                         Effectful.Zoo.Console.Static                         Effectful.Zoo.Core                         Effectful.Zoo.DataLog.Api+                        Effectful.Zoo.DataLog.Api.Json                         Effectful.Zoo.DataLog.Data.DataLogger                         Effectful.Zoo.DataLog.Data.LogEntry                         Effectful.Zoo.DataLog.Dynamic+                        Effectful.Zoo.DataLog.Dynamic.Api+                        Effectful.Zoo.DataLog.Dynamic.Effect                         Effectful.Zoo.DataLog.Static+                        Effectful.Zoo.DataLog.Static.Api+                        Effectful.Zoo.DataLog.Static.Effect                         Effectful.Zoo.Environment                         Effectful.Zoo.Error.Dynamic                         Effectful.Zoo.Error.Static@@ -164,16 +169,16 @@                         Effectful.Zoo.Function                         Effectful.Zoo.Lazy.Dynamic                         Effectful.Zoo.Log.Api-                        Effectful.Zoo.Log.Api.Generic-                        Effectful.Zoo.Log.Api.LazyText                         Effectful.Zoo.Log.Api.Render-                        Effectful.Zoo.Log.Api.String-                        Effectful.Zoo.Log.Api.Text                         Effectful.Zoo.Log.Data.Logger                         Effectful.Zoo.Log.Data.LogMessage                         Effectful.Zoo.Log.Data.Severity                         Effectful.Zoo.Log.Dynamic+                        Effectful.Zoo.Log.Dynamic.Api+                        Effectful.Zoo.Log.Dynamic.Effect                         Effectful.Zoo.Log.Static+                        Effectful.Zoo.Log.Static.Api+                        Effectful.Zoo.Log.Static.Effect                         Effectful.Zoo.Prim                         Effectful.Zoo.Process                         Effectful.Zoo.Reader.Static