packages feed

hw-polysemy 0.2.2.0 → 0.2.3.0

raw patch · 5 files changed

+111/−1 lines, 5 filesdep +temporaryPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: temporary

API changes (from Hackage documentation)

+ HaskellWorks.Polysemy.Hedgehog.Workspace: moduleWorkspace :: () => Member Hedgehog r => Member Log r => Member (Embed IO) r => Member (Error IOException) r => String -> (FilePath -> Sem r ()) -> Sem r ()
+ HaskellWorks.Polysemy.Hedgehog.Workspace: workspace :: () => Member Hedgehog r => Member Log r => Member (Embed IO) r => Member (Error IOException) r => HasCallStack => FilePath -> (FilePath -> Sem r ()) -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: eval :: forall r_amDd a_amqx. (Member Hedgehog r_amDd, HasCallStack) => a_amqx -> Sem r_amDd a_amqx
+ HaskellWorks.Polysemy.Hedgehog: eval :: forall r_amDs a_amqM. (Member Hedgehog r_amDs, HasCallStack) => a_amqM -> Sem r_amDs a_amqM
- HaskellWorks.Polysemy.Hedgehog: evalIO :: forall r_amDh a_amqB. (Member Hedgehog r_amDh, HasCallStack) => IO a_amqB -> Sem r_amDh a_amqB
+ HaskellWorks.Polysemy.Hedgehog: evalIO :: forall r_amDw a_amqQ. (Member Hedgehog r_amDw, HasCallStack) => IO a_amqQ -> Sem r_amDw a_amqQ
- HaskellWorks.Polysemy.Hedgehog: evalM :: forall r_amDf a_amqA. (Member Hedgehog r_amDf, HasCallStack) => Sem r_amDf a_amqA -> Sem r_amDf a_amqA
+ HaskellWorks.Polysemy.Hedgehog: evalM :: forall r_amDu a_amqP. (Member Hedgehog r_amDu, HasCallStack) => Sem r_amDu a_amqP -> Sem r_amDu a_amqP
- HaskellWorks.Polysemy.Hedgehog.Assert: evalIO :: forall r_amDh a_amqB. (Member Hedgehog r_amDh, HasCallStack) => IO a_amqB -> Sem r_amDh a_amqB
+ HaskellWorks.Polysemy.Hedgehog.Assert: evalIO :: forall r_amDw a_amqQ. (Member Hedgehog r_amDw, HasCallStack) => IO a_amqQ -> Sem r_amDw a_amqQ
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: assertEquals :: forall r_amDa a_X0. (Member Hedgehog r_amDa, HasCallStack, Eq a_X0, Show a_X0) => a_X0 -> a_X0 -> Sem r_amDa ()
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: assertEquals :: forall r_amDp a_X0. (Member Hedgehog r_amDp, HasCallStack, Eq a_X0, Show a_X0) => a_X0 -> a_X0 -> Sem r_amDp ()
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: eval :: forall r_amDd a_amqx. (Member Hedgehog r_amDd, HasCallStack) => a_amqx -> Sem r_amDd a_amqx
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: eval :: forall r_amDs a_amqM. (Member Hedgehog r_amDs, HasCallStack) => a_amqM -> Sem r_amDs a_amqM
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalIO :: forall r_amDh a_amqB. (Member Hedgehog r_amDh, HasCallStack) => IO a_amqB -> Sem r_amDh a_amqB
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalIO :: forall r_amDw a_amqQ. (Member Hedgehog r_amDw, HasCallStack) => IO a_amqQ -> Sem r_amDw a_amqQ
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalM :: forall r_amDf a_amqA. (Member Hedgehog r_amDf, HasCallStack) => Sem r_amDf a_amqA -> Sem r_amDf a_amqA
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalM :: forall r_amDu a_amqP. (Member Hedgehog r_amDu, HasCallStack) => Sem r_amDu a_amqP -> Sem r_amDu a_amqP
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWith :: forall r_amDl a_amqF. (Member Hedgehog r_amDl, HasCallStack) => Maybe Diff -> String -> Sem r_amDl a_amqF
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWith :: forall r_amDA a_amqU. (Member Hedgehog r_amDA, HasCallStack) => Maybe Diff -> String -> Sem r_amDA a_amqU
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWithCustom :: forall r_amDo a_amqH. Member Hedgehog r_amDo => CallStack -> Maybe Diff -> String -> Sem r_amDo a_amqH
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWithCustom :: forall r_amDD a_amqW. Member Hedgehog r_amDD => CallStack -> Maybe Diff -> String -> Sem r_amDD a_amqW
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: writeLog :: forall r_amDj. Member Hedgehog r_amDj => Log -> Sem r_amDj ()
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: writeLog :: forall r_amDy. Member Hedgehog r_amDy => Log -> Sem r_amDy ()
- HaskellWorks.Polysemy.Hedgehog.Eval: eval :: forall r_amDd a_amqx. (Member Hedgehog r_amDd, HasCallStack) => a_amqx -> Sem r_amDd a_amqx
+ HaskellWorks.Polysemy.Hedgehog.Eval: eval :: forall r_amDs a_amqM. (Member Hedgehog r_amDs, HasCallStack) => a_amqM -> Sem r_amDs a_amqM
- HaskellWorks.Polysemy.Hedgehog.Eval: evalIO :: forall r_amDh a_amqB. (Member Hedgehog r_amDh, HasCallStack) => IO a_amqB -> Sem r_amDh a_amqB
+ HaskellWorks.Polysemy.Hedgehog.Eval: evalIO :: forall r_amDw a_amqQ. (Member Hedgehog r_amDw, HasCallStack) => IO a_amqQ -> Sem r_amDw a_amqQ
- HaskellWorks.Polysemy.Hedgehog.Eval: evalM :: forall r_amDf a_amqA. (Member Hedgehog r_amDf, HasCallStack) => Sem r_amDf a_amqA -> Sem r_amDf a_amqA
+ HaskellWorks.Polysemy.Hedgehog.Eval: evalM :: forall r_amDu a_amqP. (Member Hedgehog r_amDu, HasCallStack) => Sem r_amDu a_amqP -> Sem r_amDu a_amqP

Files

core/HaskellWorks/Polysemy/Prelude.hs view
@@ -63,6 +63,8 @@   , ($!)   , ($)   , (&)+  , (&&)+  , (||)   , (.)   , (</>) 
+ core/HaskellWorks/Polysemy/Stack.hs view
@@ -0,0 +1,11 @@+module HaskellWorks.Polysemy.Stack+  ( callerModuleName+  ) where++import           GHC.Stack                     (callStack, getCallStack,+                                                srcLocModule)+import           HaskellWorks.Polysemy.Prelude++-- | Get the module name of the caller.+callerModuleName :: HasCallStack => String+callerModuleName = maybe "<no-module>" (srcLocModule . snd) (listToMaybe (getCallStack callStack))
+ core/HaskellWorks/Polysemy/System/IO/Temp.hs view
@@ -0,0 +1,26 @@+module HaskellWorks.Polysemy.System.IO.Temp+  ( createTempDirectory,+    getCanonicalTemporaryDirectory,+  ) where++import           HaskellWorks.Polysemy.Prelude+import           Polysemy+import qualified System.IO.Temp                as IO++createTempDirectory :: ()+  => HasCallStack+  => Member (Embed IO) r+  => FilePath+  -> String+  -> Sem r FilePath+createTempDirectory fp template = withFrozenCallStack $ do+  embed $ IO.createTempDirectory fp template+{-# INLINE createTempDirectory #-}++getCanonicalTemporaryDirectory :: ()+  => HasCallStack+  => Member (Embed IO) r+  => Sem r FilePath+getCanonicalTemporaryDirectory = withFrozenCallStack $ do+  embed IO.getCanonicalTemporaryDirectory+{-# INLINE getCanonicalTemporaryDirectory #-}
+ hedgehog/HaskellWorks/Polysemy/Hedgehog/Workspace.hs view
@@ -0,0 +1,65 @@+module HaskellWorks.Polysemy.Hedgehog.Workspace+  ( workspace+  , moduleWorkspace+  ) where++import           HaskellWorks.Polysemy.Hedgehog+import           HaskellWorks.Polysemy.Prelude+import           HaskellWorks.Polysemy.Stack+import           HaskellWorks.Polysemy.System.Directory+import           HaskellWorks.Polysemy.System.Environment+import           HaskellWorks.Polysemy.System.IO.Temp+import           Polysemy+import           Polysemy.Error+import           Polysemy.Log+import           System.Info++import qualified HaskellWorks.Polysemy.System.IO          as PIO++-- | Create a workspace directory which will exist for at least the duration of+-- the supplied block.+--+-- The directory will have the supplied prefix but contain a generated random+-- suffix to prevent interference between tests+--+-- The directory will be deleted if the block succeeds, but left behind if+-- the block fails.+workspace :: ()+  => Member Hedgehog r+  => Member Log r+  => Member (Embed IO) r+  => Member (Error IOException) r+  => HasCallStack+  => FilePath+  -> (FilePath -> Sem r ())+  -> Sem r ()+workspace prefixPath f = withFrozenCallStack $ do+  systemTemp <- getCanonicalTemporaryDirectory+  maybeKeepWorkspace <- lookupEnv "KEEP_WORKSPACE"+  ws <- createTempDirectory systemTemp $ prefixPath <> "-test"+  jot_ $ "Workspace: " <> ws+  PIO.writeFile (ws </> "module") callerModuleName+  f ws+  when (os /= "mingw32" && maybeKeepWorkspace /= Just "1") $ do+    removePathForcibly ws++-- | Create a workspace directory which will exist for at least the duration of+-- the supplied block.+--+-- The directory will have the prefix as "$prefixPath/$moduleName" but contain a generated random+-- suffix to prevent interference between tests+--+-- The directory will be deleted if the block succeeds, but left behind if+-- the block fails.+--+-- The 'prefix' argument should not contain directory delimeters.+moduleWorkspace ::  ()+  => Member Hedgehog r+  => Member Log r+  => Member (Embed IO) r+  => Member (Error IOException) r+  => String+  -> (FilePath -> Sem r ())+  -> Sem r ()+moduleWorkspace prefix f = withFrozenCallStack $+  workspace (prefix <> "-" <> callerModuleName) f
hw-polysemy.cabal view
@@ -1,6 +1,6 @@ cabal-version:          3.4 name:                   hw-polysemy-version:                0.2.2.0+version:                0.2.3.0 synopsis:               Opinionated polysemy library description:            Opinionated polysemy library. license:                Apache-2.0@@ -40,6 +40,7 @@ common stm                        { build-depends: stm                                         < 2.6    } common tasty                      { build-depends: tasty                                       < 1.6    } common tasty-hedgehog             { build-depends: tasty-hedgehog                              < 1.5    }+common temporary                  { build-depends: temporary                                   < 1.4    } common text                       { build-depends: text                                        < 3      } common time                       { build-depends: time                                        < 2      } common unliftio                   { build-depends: unliftio                                    < 0.3    }@@ -83,6 +84,7 @@                         resourcet,                         stm,                         text,+                        temporary,                         time,                         unliftio,                         yaml,@@ -116,10 +118,12 @@                         HaskellWorks.Polysemy.FilePath                         HaskellWorks.Polysemy.OS                         HaskellWorks.Polysemy.Prelude+                        HaskellWorks.Polysemy.Stack                         HaskellWorks.Polysemy.String                         HaskellWorks.Polysemy.System.Directory                         HaskellWorks.Polysemy.System.Environment                         HaskellWorks.Polysemy.System.IO+                        HaskellWorks.Polysemy.System.IO.Temp                         HaskellWorks.Polysemy.System.Process   hs-source-dirs:       core   default-language:     GHC2021@@ -154,6 +158,7 @@                         HaskellWorks.Polysemy.Hedgehog.Process                         HaskellWorks.Polysemy.Hedgehog.Process.Internal                         HaskellWorks.Polysemy.Hedgehog.Property+                        HaskellWorks.Polysemy.Hedgehog.Workspace   hs-source-dirs:       hedgehog   default-language:     GHC2021 @@ -193,6 +198,7 @@                         HaskellWorks.Polysemy.Hedgehog.Process,                         HaskellWorks.Polysemy.Hedgehog.Process.Internal,                         HaskellWorks.Polysemy.Hedgehog.Property,+                        HaskellWorks.Polysemy.Hedgehog.Workspace,                         HaskellWorks.Polysemy.Prelude,                         HaskellWorks.Polysemy.String,                         HaskellWorks.Polysemy.System.Directory,