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 +1/−1
- components/amazonka/Effectful/Zoo/Amazonka/Api/Send.hs +1/−1
- components/amazonka/Effectful/Zoo/Amazonka/Static.hs +1/−1
- components/core/Effectful/Zoo/DataLog/Api.hs +2/−60
- components/core/Effectful/Zoo/DataLog/Api/Json.hs +54/−0
- components/core/Effectful/Zoo/DataLog/Dynamic.hs +3/−26
- components/core/Effectful/Zoo/DataLog/Dynamic/Api.hs +18/−0
- components/core/Effectful/Zoo/DataLog/Dynamic/Effect.hs +31/−0
- components/core/Effectful/Zoo/DataLog/Static.hs +5/−91
- components/core/Effectful/Zoo/DataLog/Static/Api.hs +19/−0
- components/core/Effectful/Zoo/DataLog/Static/Effect.hs +91/−0
- components/core/Effectful/Zoo/FileSystem.hs +1/−2
- components/core/Effectful/Zoo/Log/Api.hs +1/−1
- components/core/Effectful/Zoo/Log/Api/Generic.hs +0/−81
- components/core/Effectful/Zoo/Log/Api/LazyText.hs +0/−81
- components/core/Effectful/Zoo/Log/Api/String.hs +0/−81
- components/core/Effectful/Zoo/Log/Api/Text.hs +0/−81
- components/core/Effectful/Zoo/Log/Dynamic.hs +10/−30
- components/core/Effectful/Zoo/Log/Dynamic/Api.hs +81/−0
- components/core/Effectful/Zoo/Log/Dynamic/Effect.hs +35/−0
- components/core/Effectful/Zoo/Log/Static.hs +11/−99
- components/core/Effectful/Zoo/Log/Static/Api.hs +81/−0
- components/core/Effectful/Zoo/Log/Static/Effect.hs +109/−0
- components/hedgehog/Effectful/Zoo/Hedgehog/Api/Internal/Cabal.hs +1/−1
- components/hedgehog/Effectful/Zoo/Hedgehog/Api/Journal.hs +2/−2
- components/hedgehog/Effectful/Zoo/Hedgehog/Api/Process.hs +1/−1
- components/hedgehog/Effectful/Zoo/Hedgehog/Api/Workspace.hs +1/−1
- components/hedgehog/Effectful/Zoo/Hedgehog/Effect/Run.hs +1/−1
- components/rds-data-test/Effectful/Zoo/RdsData/Test/Cluster.hs +1/−23
- components/rds-data-test/Effectful/Zoo/RdsData/Test/Workspace.hs +1/−1
- components/rds-data/Effectful/Zoo/RdsData/Core.hs +2/−2
- components/rds-data/Effectful/Zoo/RdsData/Migration.hs +2/−2
- effectful-zoo.cabal +10/−5
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