hw-polysemy 0.2.11.1 → 0.2.12.0
raw patch · 8 files changed
+345/−18 lines, 8 filesdep +amazonkadep +amazonka-s3dep +http-conduitPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: amazonka, amazonka-s3, http-conduit, tasty-discover, testcontainers
API changes (from Hackage documentation)
- HaskellWorks.Polysemy.Hedgehog: (===) :: () => Member Hedgehog r => Eq a => Show a => HasCallStack => a -> a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: PackagePath :: FilePath -> PackagePath
- HaskellWorks.Polysemy.Hedgehog: ProjectRoot :: FilePath -> ProjectRoot
- HaskellWorks.Polysemy.Hedgehog: Workspace :: FilePath -> Workspace
- HaskellWorks.Polysemy.Hedgehog: [$sel:filePath:PackagePath] :: PackagePath -> FilePath
- HaskellWorks.Polysemy.Hedgehog: [$sel:filePath:ProjectRoot] :: ProjectRoot -> FilePath
- HaskellWorks.Polysemy.Hedgehog: [$sel:filePath:Workspace] :: Workspace -> FilePath
- HaskellWorks.Polysemy.Hedgehog: byDeadlineIO :: () => HasCallStack => Member (Embed m) r => Member (Embed IO) r => Member Hedgehog r => Member Log r => NominalDiffTime -> UTCTime -> String -> m a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: byDeadlineM :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => NominalDiffTime -> UTCTime -> String -> Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: byDurationIO :: () => HasCallStack => Member (Embed m) r => Member (Embed IO) r => Member Hedgehog r => Member Log r => NominalDiffTime -> NominalDiffTime -> String -> m b -> Sem r b
- HaskellWorks.Polysemy.Hedgehog: byDurationM :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member Log r => NominalDiffTime -> NominalDiffTime -> String -> Sem r b -> Sem r b
- HaskellWorks.Polysemy.Hedgehog: catchAssertion :: forall r_amJG a_alm1. (Member Hedgehog r_amJG, HasCallStack) => Sem r_amJG a_alm1 -> (Failure -> Sem r_amJG a_alm1) -> Sem r_amJG a_alm1
- HaskellWorks.Polysemy.Hedgehog: catchFail :: forall e r a. () => Member Hedgehog r => HasCallStack => Show e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: data Hedgehog m rv
- HaskellWorks.Polysemy.Hedgehog: data () => Property
- HaskellWorks.Polysemy.Hedgehog: eval :: forall r_amJJ a_alm2. (Member Hedgehog r_amJJ, HasCallStack) => a_alm2 -> Sem r_amJJ a_alm2
- HaskellWorks.Polysemy.Hedgehog: evalIO :: forall r_amJN a_alm6. (Member Hedgehog r_amJN, HasCallStack) => IO a_alm6 -> Sem r_amJN a_alm6
- HaskellWorks.Polysemy.Hedgehog: evalIO_ :: () => Member Hedgehog r => HasCallStack => IO a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: evalM :: forall r_amJL a_alm5. (Member Hedgehog r_amJL, HasCallStack) => Sem r_amJL a_alm5 -> Sem r_amJL a_alm5
- HaskellWorks.Polysemy.Hedgehog: evalM_ :: () => Member Hedgehog r => HasCallStack => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: failMessage :: () => Member Hedgehog r => HasCallStack => CallStack -> String -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: failWith :: forall r_amJP a_alm9. (Member Hedgehog r_amJP, HasCallStack) => Maybe Diff -> String -> Sem r_amJP a_alm9
- HaskellWorks.Polysemy.Hedgehog: failWithCustom :: forall r_amJS a_almb. Member Hedgehog r_amJS => CallStack -> Maybe Diff -> String -> Sem r_amJS a_almb
- HaskellWorks.Polysemy.Hedgehog: failure :: () => Member Hedgehog r => HasCallStack => Sem r a
- HaskellWorks.Polysemy.Hedgehog: findCabalProjectDir :: () => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog: hedgehogToPropertyFinal :: () => Member (Final (PropertyT IO)) r => Sem (Hedgehog ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: interpretDataLogHedgehog :: () => Member Hedgehog r => (a -> Text) -> (a -> CallStack) -> InterpreterFor (DataLog a) r
- HaskellWorks.Polysemy.Hedgehog: jot :: () => Member Hedgehog r => HasCallStack => String -> Sem r String
- HaskellWorks.Polysemy.Hedgehog: jotBsUtf8M :: () => Member Hedgehog r => HasCallStack => Sem r ByteString -> Sem r ByteString
- HaskellWorks.Polysemy.Hedgehog: jotEach :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => f a -> Sem r (f a)
- HaskellWorks.Polysemy.Hedgehog: jotEachIO :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => IO (f a) -> Sem r (f a)
- HaskellWorks.Polysemy.Hedgehog: jotEachIO_ :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => IO (f a) -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotEachM :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => Sem r (f a) -> Sem r (f a)
- HaskellWorks.Polysemy.Hedgehog: jotEachM_ :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => Sem r (f a) -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotEach_ :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => f a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotIO :: () => Member Hedgehog r => HasCallStack => IO String -> Sem r String
- HaskellWorks.Polysemy.Hedgehog: jotIO_ :: () => Member Hedgehog r => HasCallStack => IO String -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotJson :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotJsonM :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotJsonM_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotJsonPretty :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotJsonPrettyM :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotJsonPrettyM_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotJsonPretty_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotJson_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotLbsUtf8M :: () => Member Hedgehog r => HasCallStack => Sem r ByteString -> Sem r ByteString
- HaskellWorks.Polysemy.Hedgehog: jotM :: () => ToString s => Member Hedgehog r => HasCallStack => Sem r s -> Sem r s
- HaskellWorks.Polysemy.Hedgehog: jotM_ :: () => Member Hedgehog r => HasCallStack => Sem r String -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotPkgGoldenFile :: () => HasCallStack => Member Hedgehog r => Member (Reader PackagePath) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog: jotPkgInputFile :: () => HasCallStack => Member Hedgehog r => Member (Reader PackagePath) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog: jotRootInputFile :: () => HasCallStack => Member Hedgehog r => Member (Reader ProjectRoot) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog: jotShow :: () => Member Hedgehog r => HasCallStack => Show a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotShowIO :: () => Member Hedgehog r => HasCallStack => Show a => IO a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotShowIO_ :: () => Member Hedgehog r => HasCallStack => Show a => IO a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotShowM :: () => Member Hedgehog r => HasCallStack => Show a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotShowM_ :: () => Member Hedgehog r => HasCallStack => Show a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotShow_ :: () => Member Hedgehog r => HasCallStack => Show a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotTempFile :: () => HasCallStack => Member Hedgehog r => Member (Reader Workspace) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog: jotText_ :: () => Member Hedgehog r => HasCallStack => Text -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotWithCallstack :: () => Member Hedgehog r => CallStack -> String -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotYaml :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotYamlM :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: jotYamlM_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jotYaml_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: jot_ :: () => Member Hedgehog r => HasCallStack => ToString s => s -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: leftFail :: () => Member Hedgehog r => Show e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailJson :: () => Member Hedgehog r => ToJSON e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailJsonM :: forall e r a. () => Member Hedgehog r => ToJSON e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailJsonPretty :: () => Member Hedgehog r => ToJSON e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailJsonPrettyM :: forall e r a. () => Member Hedgehog r => ToJSON e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailM :: forall e r a. () => Member Hedgehog r => Show e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailPretty :: () => Member Hedgehog r => Pretty e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailPrettyM :: forall e r a. () => Member Hedgehog r => Pretty e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailYaml :: () => Member Hedgehog r => ToJSON e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: leftFailYamlM :: forall e r a. () => Member Hedgehog r => ToJSON e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: moduleWorkspace :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => String -> Sem (Reader Workspace : r) () -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: newtype PackagePath
- HaskellWorks.Polysemy.Hedgehog: newtype ProjectRoot
- HaskellWorks.Polysemy.Hedgehog: newtype Workspace
- HaskellWorks.Polysemy.Hedgehog: nothingFail :: () => Member Hedgehog r => HasCallStack => Maybe a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: nothingFailM :: forall r a. () => Member Hedgehog r => HasCallStack => Sem r (Maybe a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: propertyOnce :: () => Sem [Log, DataLog (LogEntry LogMessage), DataLog Text, GhcTime, Hedgehog, Embed IO, Embed (PropertyT IO), Resource, Final (PropertyT IO)] () -> Property
- HaskellWorks.Polysemy.Hedgehog: requireHead :: () => Member Hedgehog r => HasCallStack => [a] -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: throwAssertion :: forall r_amJW a_almd. (Member Hedgehog r_amJW, HasCallStack) => Failure -> Sem r_amJW a_almd
- HaskellWorks.Polysemy.Hedgehog: trapAssertion :: () => Member Hedgehog r => (Failure -> Sem r a) -> Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: trapFail :: forall e r a. () => Member Hedgehog r => HasCallStack => Show e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: trapFailJson :: forall e r a. () => Member Hedgehog r => HasCallStack => ToJSON e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: trapFailJsonPretty :: forall e r a. () => Member Hedgehog r => HasCallStack => ToJSON e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: trapFailYaml :: forall e r a. () => Member Hedgehog r => HasCallStack => ToJSON e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog: workspace :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => HasCallStack => FilePath -> Sem (Reader Workspace : r) () -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog: writeLog :: forall r_amJY. (Member Hedgehog r_amJY, HasCallStack) => Log -> Sem r_amJY ()
- HaskellWorks.Polysemy.Hedgehog.Assert: (===) :: () => Member Hedgehog r => Eq a => Show a => HasCallStack => a -> a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertDirectoryExists :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertDirectoryMissing :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertEndsWithSingleNewline :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertFileExists :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertFileLines :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => (Int -> Bool) -> FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertFileMissing :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertFileOccurences :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => Int -> String -> FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertFilesExist :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => [FilePath] -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertFilesMissing :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => [FilePath] -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertIsJsonFile_ :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertIsYamlFile :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Assert: assertPidOk :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member (Error IOException) r => ProcessHandle -> Sem r Pid
- HaskellWorks.Polysemy.Hedgehog.Assert: byDeadlineIO :: () => HasCallStack => Member (Embed m) r => Member (Embed IO) r => Member Hedgehog r => Member Log r => NominalDiffTime -> UTCTime -> String -> m a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: byDeadlineM :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => NominalDiffTime -> UTCTime -> String -> Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: byDurationIO :: () => HasCallStack => Member (Embed m) r => Member (Embed IO) r => Member Hedgehog r => Member Log r => NominalDiffTime -> NominalDiffTime -> String -> m b -> Sem r b
- HaskellWorks.Polysemy.Hedgehog.Assert: byDurationM :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member Log r => NominalDiffTime -> NominalDiffTime -> String -> Sem r b -> Sem r b
- HaskellWorks.Polysemy.Hedgehog.Assert: catchFail :: forall e r a. () => Member Hedgehog r => HasCallStack => Show e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: data Hedgehog m rv
- HaskellWorks.Polysemy.Hedgehog.Assert: evalIO :: forall r_amJN a_alm6. (Member Hedgehog r_amJN, HasCallStack) => IO a_alm6 -> Sem r_amJN a_alm6
- HaskellWorks.Polysemy.Hedgehog.Assert: failMessage :: () => Member Hedgehog r => HasCallStack => CallStack -> String -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: failure :: () => Member Hedgehog r => HasCallStack => Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFail :: () => Member Hedgehog r => Show e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailJson :: () => Member Hedgehog r => ToJSON e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailJsonM :: forall e r a. () => Member Hedgehog r => ToJSON e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailJsonPretty :: () => Member Hedgehog r => ToJSON e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailJsonPrettyM :: forall e r a. () => Member Hedgehog r => ToJSON e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailM :: forall e r a. () => Member Hedgehog r => Show e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailPretty :: () => Member Hedgehog r => Pretty e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailPrettyM :: forall e r a. () => Member Hedgehog r => Pretty e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailYaml :: () => Member Hedgehog r => ToJSON e => HasCallStack => Either e a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: leftFailYamlM :: forall e r a. () => Member Hedgehog r => ToJSON e => HasCallStack => Sem r (Either e a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: nothingFail :: () => Member Hedgehog r => HasCallStack => Maybe a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: nothingFailM :: forall r a. () => Member Hedgehog r => HasCallStack => Sem r (Maybe a) -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: requireHead :: () => Member Hedgehog r => HasCallStack => [a] -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: trapFail :: forall e r a. () => Member Hedgehog r => HasCallStack => Show e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: trapFailJson :: forall e r a. () => Member Hedgehog r => HasCallStack => ToJSON e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: trapFailJsonPretty :: forall e r a. () => Member Hedgehog r => HasCallStack => ToJSON e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Assert: trapFailYaml :: forall e r a. () => Member Hedgehog r => HasCallStack => ToJSON e => Sem (Error e ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: assertEquals :: forall r_amJD a_X0. (Member Hedgehog r_amJD, HasCallStack, Eq a_X0, Show a_X0) => a_X0 -> a_X0 -> Sem r_amJD ()
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: catchAssertion :: forall r_amJG a_alm1. (Member Hedgehog r_amJG, HasCallStack) => Sem r_amJG a_alm1 -> (Failure -> Sem r_amJG a_alm1) -> Sem r_amJG a_alm1
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: catchExToPropertyFinal :: () => Member (Final (PropertyT IO)) r => Sem (Except ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: data Hedgehog m rv
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: eval :: forall r_amJJ a_alm2. (Member Hedgehog r_amJJ, HasCallStack) => a_alm2 -> Sem r_amJJ a_alm2
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalIO :: forall r_amJN a_alm6. (Member Hedgehog r_amJN, HasCallStack) => IO a_alm6 -> Sem r_amJN a_alm6
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalM :: forall r_amJL a_alm5. (Member Hedgehog r_amJL, HasCallStack) => Sem r_amJL a_alm5 -> Sem r_amJL a_alm5
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWith :: forall r_amJP a_alm9. (Member Hedgehog r_amJP, HasCallStack) => Maybe Diff -> String -> Sem r_amJP a_alm9
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWithCustom :: forall r_amJS a_almb. Member Hedgehog r_amJS => CallStack -> Maybe Diff -> String -> Sem r_amJS a_almb
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: hedgehogToMonadTestFinal :: () => MonadIO m => MonadCatch m => MonadTest m => MonadAssertion m => Member (Final m) r => Sem (Hedgehog ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: hedgehogToPropertyFinal :: () => Member (Final (PropertyT IO)) r => Sem (Hedgehog ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: hedgehogToTestFinal :: () => Member (Final (TestT IO)) r => Sem (Hedgehog ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: throwAssertion :: forall r_amJW a_almd. (Member Hedgehog r_amJW, HasCallStack) => Failure -> Sem r_amJW a_almd
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: trapAssertion :: () => Member Hedgehog r => (Failure -> Sem r a) -> Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: writeLog :: forall r_amJY. (Member Hedgehog r_amJY, HasCallStack) => Log -> Sem r_amJY ()
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: catchAssertion :: MonadAssertion m => m a -> (Failure -> m a) -> m a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: class Monad m => MonadAssertion m
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: failWithCustom :: () => MonadTest m => CallStack -> Maybe Diff -> String -> m a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: instance GHC.Base.Monad m => HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal.MonadAssertion (Hedgehog.Internal.Property.PropertyT m)
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: instance GHC.Base.Monad m => HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal.MonadAssertion (Hedgehog.Internal.Property.TestT m)
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: instance HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal.MonadAssertion m => HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal.MonadAssertion (Control.Monad.Trans.Resource.Internal.ResourceT m)
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal: throwAssertion :: MonadAssertion m => Failure -> m a
- HaskellWorks.Polysemy.Hedgehog.Effect.Log: getLogEntryCallStack :: LogEntry LogMessage -> CallStack
- HaskellWorks.Polysemy.Hedgehog.Effect.Log: interpretDataLogHedgehog :: () => Member Hedgehog r => (a -> Text) -> (a -> CallStack) -> InterpreterFor (DataLog a) r
- HaskellWorks.Polysemy.Hedgehog.Eval: eval :: forall r_amJJ a_alm2. (Member Hedgehog r_amJJ, HasCallStack) => a_alm2 -> Sem r_amJJ a_alm2
- HaskellWorks.Polysemy.Hedgehog.Eval: evalIO :: forall r_amJN a_alm6. (Member Hedgehog r_amJN, HasCallStack) => IO a_alm6 -> Sem r_amJN a_alm6
- HaskellWorks.Polysemy.Hedgehog.Eval: evalIO_ :: () => Member Hedgehog r => HasCallStack => IO a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Eval: evalM :: forall r_amJL a_alm5. (Member Hedgehog r_amJL, HasCallStack) => Sem r_amJL a_alm5 -> Sem r_amJL a_alm5
- HaskellWorks.Polysemy.Hedgehog.Eval: evalM_ :: () => Member Hedgehog r => HasCallStack => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Golden: diffFileVsGoldenFile :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member Log r => Member Resource r => FilePath -> FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Golden: diffVsGoldenFile :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member Resource r => Member Log r => String -> FilePath -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jot :: () => Member Hedgehog r => HasCallStack => String -> Sem r String
- HaskellWorks.Polysemy.Hedgehog.Jot: jotBsUtf8M :: () => Member Hedgehog r => HasCallStack => Sem r ByteString -> Sem r ByteString
- HaskellWorks.Polysemy.Hedgehog.Jot: jotEach :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => f a -> Sem r (f a)
- HaskellWorks.Polysemy.Hedgehog.Jot: jotEachIO :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => IO (f a) -> Sem r (f a)
- HaskellWorks.Polysemy.Hedgehog.Jot: jotEachIO_ :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => IO (f a) -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotEachM :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => Sem r (f a) -> Sem r (f a)
- HaskellWorks.Polysemy.Hedgehog.Jot: jotEachM_ :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => Sem r (f a) -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotEach_ :: () => Member Hedgehog r => HasCallStack => Show a => Traversable f => f a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotIO :: () => Member Hedgehog r => HasCallStack => IO String -> Sem r String
- HaskellWorks.Polysemy.Hedgehog.Jot: jotIO_ :: () => Member Hedgehog r => HasCallStack => IO String -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJson :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJsonM :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJsonM_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJsonPretty :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJsonPrettyM :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJsonPrettyM_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJsonPretty_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotJson_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotLbsUtf8M :: () => Member Hedgehog r => HasCallStack => Sem r ByteString -> Sem r ByteString
- HaskellWorks.Polysemy.Hedgehog.Jot: jotM :: () => ToString s => Member Hedgehog r => HasCallStack => Sem r s -> Sem r s
- HaskellWorks.Polysemy.Hedgehog.Jot: jotM_ :: () => Member Hedgehog r => HasCallStack => Sem r String -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotPkgGoldenFile :: () => HasCallStack => Member Hedgehog r => Member (Reader PackagePath) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog.Jot: jotPkgInputFile :: () => HasCallStack => Member Hedgehog r => Member (Reader PackagePath) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog.Jot: jotRootInputFile :: () => HasCallStack => Member Hedgehog r => Member (Reader ProjectRoot) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog.Jot: jotShow :: () => Member Hedgehog r => HasCallStack => Show a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotShowIO :: () => Member Hedgehog r => HasCallStack => Show a => IO a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotShowIO_ :: () => Member Hedgehog r => HasCallStack => Show a => IO a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotShowM :: () => Member Hedgehog r => HasCallStack => Show a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotShowM_ :: () => Member Hedgehog r => HasCallStack => Show a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotShow_ :: () => Member Hedgehog r => HasCallStack => Show a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotTempFile :: () => HasCallStack => Member Hedgehog r => Member (Reader Workspace) r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog.Jot: jotText_ :: () => Member Hedgehog r => HasCallStack => Text -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotWithCallstack :: () => Member Hedgehog r => CallStack -> String -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotYaml :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotYamlM :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Jot: jotYamlM_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => Sem r a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jotYaml_ :: () => Member Hedgehog r => HasCallStack => ToJSON a => a -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Jot: jot_ :: () => Member Hedgehog r => HasCallStack => ToString s => s -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Process: ExecConfig :: Last [(String, String)] -> Last FilePath -> ExecConfig
- HaskellWorks.Polysemy.Hedgehog.Process: [$sel:execConfigCwd:ExecConfig] :: ExecConfig -> Last FilePath
- HaskellWorks.Polysemy.Hedgehog.Process: [$sel:execConfigEnv:ExecConfig] :: ExecConfig -> Last [(String, String)]
- HaskellWorks.Polysemy.Hedgehog.Process: binFlex :: () => HasCallStack => Member (Embed IO) r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => String -> String -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog.Process: data ExecConfig
- HaskellWorks.Polysemy.Hedgehog.Process: defaultExecConfig :: ExecConfig
- HaskellWorks.Polysemy.Hedgehog.Process: exec :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => ExecConfig -> String -> [String] -> Sem r (ExitCode, String, String)
- HaskellWorks.Polysemy.Hedgehog.Process: execDetailFlex :: () => HasCallStack => Member (Embed IO) r => Member (Error GenericError) r => Member (Error IOException) r => Member Hedgehog r => Member Log r => ExecConfig -> String -> String -> [String] -> Sem r (ExitCode, String, String)
- HaskellWorks.Polysemy.Hedgehog.Process: execFlex :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => ExecConfig -> String -> String -> [String] -> Sem r (ExitCode, String, String)
- HaskellWorks.Polysemy.Hedgehog.Process: execFlexOk :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => String -> String -> [String] -> Sem r String
- HaskellWorks.Polysemy.Hedgehog.Process: execFlexOk' :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => ExecConfig -> String -> String -> [String] -> Sem r String
- HaskellWorks.Polysemy.Hedgehog.Process: execOk :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => ExecConfig -> String -> [String] -> Sem r String
- HaskellWorks.Polysemy.Hedgehog.Process: execOk_ :: () => HasCallStack => Member (Embed IO) r => Member Hedgehog r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => ExecConfig -> String -> [String] -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Process: instance GHC.Classes.Eq HaskellWorks.Polysemy.Hedgehog.Process.ExecConfig
- HaskellWorks.Polysemy.Hedgehog.Process: instance GHC.Generics.Generic HaskellWorks.Polysemy.Hedgehog.Process.ExecConfig
- HaskellWorks.Polysemy.Hedgehog.Process: instance GHC.Show.Show HaskellWorks.Polysemy.Hedgehog.Process.ExecConfig
- HaskellWorks.Polysemy.Hedgehog.Process: procFlex :: () => HasCallStack => Member (Embed IO) r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => String -> String -> [String] -> Sem r CreateProcess
- HaskellWorks.Polysemy.Hedgehog.Process: procFlex' :: () => HasCallStack => Member (Embed IO) r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => ExecConfig -> String -> String -> [String] -> Sem r CreateProcess
- HaskellWorks.Polysemy.Hedgehog.Process: waitSecondsForProcess :: forall (r :: EffectRow). (Member (Embed IO) r, Member (Error GenericError :: (Type -> Type) -> Type -> Type) r, Member (Error IOException :: (Type -> Type) -> Type -> Type) r, Member (Error TimedOut :: (Type -> Type) -> Type -> Type) r, Member Log r) => Int -> ProcessHandle -> Sem r (Maybe ExitCode)
- HaskellWorks.Polysemy.Hedgehog.Process: waitSecondsForProcessOk :: () => HasCallStack => Member Hedgehog r => Member (Embed IO) r => Member (Error GenericError) r => Member (Error IOException) r => Member Log r => Int -> ProcessHandle -> Sem r ExitCode
- HaskellWorks.Polysemy.Hedgehog.Process.Internal: argQuote :: String -> String
- HaskellWorks.Polysemy.Hedgehog.Property: data () => Property
- HaskellWorks.Polysemy.Hedgehog.Property: propertyOnce :: () => Sem [Log, DataLog (LogEntry LogMessage), DataLog Text, GhcTime, Hedgehog, Embed IO, Embed (PropertyT IO), Resource, Final (PropertyT IO)] () -> Property
- HaskellWorks.Polysemy.Hedgehog.Test: data () => Property
- HaskellWorks.Polysemy.Hedgehog.Test: test :: () => Sem [Log, DataLog (LogEntry LogMessage), DataLog Text, GhcTime, Hedgehog, Embed IO, Embed (TestT IO), Resource, Final (TestT IO)] () -> Property
- HaskellWorks.Polysemy.Hedgehog.Workspace: PackagePath :: FilePath -> PackagePath
- HaskellWorks.Polysemy.Hedgehog.Workspace: ProjectRoot :: FilePath -> ProjectRoot
- HaskellWorks.Polysemy.Hedgehog.Workspace: Workspace :: FilePath -> Workspace
- HaskellWorks.Polysemy.Hedgehog.Workspace: [$sel:filePath:PackagePath] :: PackagePath -> FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace: [$sel:filePath:ProjectRoot] :: ProjectRoot -> FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace: [$sel:filePath:Workspace] :: Workspace -> FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace: findCabalProjectDir :: () => Member Hedgehog r => Member (Embed IO) r => Member Log r => FilePath -> Sem r FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace: moduleWorkspace :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => String -> Sem (Reader Workspace : r) () -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Workspace: newtype PackagePath
- HaskellWorks.Polysemy.Hedgehog.Workspace: newtype ProjectRoot
- HaskellWorks.Polysemy.Hedgehog.Workspace: newtype Workspace
- HaskellWorks.Polysemy.Hedgehog.Workspace: workspace :: () => HasCallStack => Member Hedgehog r => Member Log r => Member (Embed IO) r => HasCallStack => FilePath -> Sem (Reader Workspace : r) () -> Sem r ()
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: PackagePath :: FilePath -> PackagePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: ProjectRoot :: FilePath -> ProjectRoot
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: Workspace :: FilePath -> Workspace
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: [$sel:filePath:PackagePath] :: PackagePath -> FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: [$sel:filePath:ProjectRoot] :: ProjectRoot -> FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: [$sel:filePath:Workspace] :: Workspace -> FilePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Classes.Eq HaskellWorks.Polysemy.Hedgehog.Workspace.Types.PackagePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Classes.Eq HaskellWorks.Polysemy.Hedgehog.Workspace.Types.ProjectRoot
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Classes.Eq HaskellWorks.Polysemy.Hedgehog.Workspace.Types.Workspace
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Generics.Generic HaskellWorks.Polysemy.Hedgehog.Workspace.Types.Workspace
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Show.Show HaskellWorks.Polysemy.Hedgehog.Workspace.Types.PackagePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Show.Show HaskellWorks.Polysemy.Hedgehog.Workspace.Types.ProjectRoot
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: instance GHC.Show.Show HaskellWorks.Polysemy.Hedgehog.Workspace.Types.Workspace
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: newtype PackagePath
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: newtype ProjectRoot
- HaskellWorks.Polysemy.Hedgehog.Workspace.Types: newtype Workspace
+ HaskellWorks.Polysemy.Amazonka.LocalStack: runReaderLocalAwsEnvDiscover :: () => Member (Embed IO) r => IO LocalStackEndpoint -> Sem (Reader Env : r) a -> Sem r a
+ HaskellWorks.TestContainers.LocalStack: LocalStackEndpoint :: String -> Int -> LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack: [$sel:host:LocalStackEndpoint] :: LocalStackEndpoint -> String
+ HaskellWorks.TestContainers.LocalStack: [$sel:port:LocalStackEndpoint] :: LocalStackEndpoint -> Int
+ HaskellWorks.TestContainers.LocalStack: data LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack: setupContainers :: MonadDocker m => m LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack: waitForLocalStack :: String -> Int -> Int -> IO ()
+ HaskellWorks.TestContainers.LocalStack.Types: LocalStackEndpoint :: String -> Int -> LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack.Types: [$sel:host:LocalStackEndpoint] :: LocalStackEndpoint -> String
+ HaskellWorks.TestContainers.LocalStack.Types: [$sel:port:LocalStackEndpoint] :: LocalStackEndpoint -> Int
+ HaskellWorks.TestContainers.LocalStack.Types: data LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack.Types: instance GHC.Classes.Eq HaskellWorks.TestContainers.LocalStack.Types.LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack.Types: instance GHC.Generics.Generic HaskellWorks.TestContainers.LocalStack.Types.LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack.Types: instance GHC.Show.Show HaskellWorks.TestContainers.LocalStack.Types.LocalStackEndpoint
Files
- amazonka/HaskellWorks/Polysemy/Amazonka.hs +43/−0
- hedgehog/HaskellWorks/Polysemy/Hedgehog/Property.hs +13/−13
- hw-polysemy.cabal +55/−5
- test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs +37/−0
- test/Test/Polysemy/Env.hs +73/−0
- testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs +36/−0
- testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs +75/−0
- testcontainers-localstack/HaskellWorks/TestContainers/LocalStack/Types.hs +13/−0
+ amazonka/HaskellWorks/Polysemy/Amazonka.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeApplications #-}++module HaskellWorks.Polysemy.Amazonka+ ( runReaderAwsEnvDiscover,+ sendAws,+ ) where++import Control.Monad.IO.Class+import Control.Monad.Trans.Resource+import Data.Typeable++import qualified Amazonka as AWS+import HaskellWorks.Prelude+import Polysemy+import Polysemy.Error+import Polysemy.Reader+import qualified System.IO as IO++runReaderAwsEnvDiscover :: ()+ => Member (Embed IO) r+ => Sem (Reader AWS.Env : r) a+ -> Sem r a+runReaderAwsEnvDiscover f = do+ logger' <- embed $ AWS.newLogger AWS.Debug IO.stdout+ discoveredAwsEnv <- embed $ AWS.newEnv AWS.discover+ let awsEnv = discoveredAwsEnv { AWS.logger = logger' }+ runReader awsEnv f++sendAws :: ()+ => AWS.AWSRequest a+ => Member (Embed m) r+ => Member (Error AWS.Error) r+ => Member (Reader AWS.Env) r+ => MonadIO m+ => Typeable (AWS.AWSResponse a)+ => Typeable a+ => a+ -> Sem r (AWS.AWSResponse a)+sendAws req = do+ envAws <- ask @AWS.Env+ result <- embed $ liftIO $ runResourceT $ AWS.sendEither envAws req+ fromEither result
hedgehog/HaskellWorks/Polysemy/Hedgehog/Property.hs view
@@ -32,16 +32,16 @@ , Final (H.PropertyT IO) ] () -> H.Property-propertyOnce f = f- & interpretLogDataLog- & setLogLevel (Just Info)- & interpretDataLogHedgehog formatLogEntry getLogEntryCallStack- & interpretDataLogHedgehog id (const GHC.callStack)- & interpretTimeGhc- & hedgehogToPropertyFinal- & runEmbedded liftIO- & embedToFinal @(H.PropertyT IO)- & runResource- & runFinal- & H.property- & H.withTests 1+propertyOnce f =+ f & interpretLogDataLog+ & setLogLevel (Just Info)+ & interpretDataLogHedgehog formatLogEntry getLogEntryCallStack+ & interpretDataLogHedgehog id (const GHC.callStack)+ & interpretTimeGhc+ & hedgehogToPropertyFinal+ & runEmbedded liftIO+ & embedToFinal @(H.PropertyT IO)+ & runResource+ & runFinal+ & H.property+ & H.withTests 1
hw-polysemy.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: hw-polysemy-version: 0.2.11.1+version: 0.2.12.0 synopsis: Opinionated polysemy library description: Opinionated polysemy library. license: Apache-2.0@@ -22,6 +22,8 @@ common aeson { build-depends: aeson < 2.3 } common aeson-pretty { build-depends: aeson-pretty < 0.9 } common async { build-depends: async < 2.3 }+common amazonka { build-depends: amazonka >= 2 && < 3 }+common amazonka-s3 { build-depends: amazonka-s3 >= 2 && < 3 } common bytestring { build-depends: bytestring < 0.13 } common contravariant { build-depends: contravariant < 1.6 } common Diff { build-depends: Diff < 0.6 }@@ -30,6 +32,7 @@ common filepath { build-depends: filepath < 1.6 } common generic-lens { build-depends: generic-lens < 2.3 } common ghc-prim { build-depends: ghc-prim < 0.12 }+common http-conduit { build-depends: http-conduit >= 2.3 && < 2.4 } common hedgehog { build-depends: hedgehog < 1.5 } common network { build-depends: network < 3.3 } common lens { build-depends: lens < 5.4 }@@ -43,9 +46,11 @@ common resourcet { build-depends: resourcet < 1.4 } common stm { build-depends: stm < 2.6 } common tasty { build-depends: tasty < 1.6 }+common tasty-discover { build-depends: tasty-discover < 6 } common tasty-hedgehog { build-depends: tasty-hedgehog < 1.5 } common temporary { build-depends: temporary < 1.4 } common text { build-depends: text < 3 }+common testcontainers { build-depends: testcontainers < 0.6 } common time { build-depends: time < 2 } common transformers { build-depends: transformers < 0.7 } common unliftio { build-depends: unliftio < 0.3 }@@ -55,9 +60,11 @@ if os(windows) build-depends: Win32 >= 2.5.4.1 -common hw-polysemy { build-depends: hw-polysemy }-common hw-polysemy-core { build-depends: hw-polysemy:core }-common hw-polysemy-hedgehog { build-depends: hw-polysemy:hedgehog }+common hw-polysemy { build-depends: hw-polysemy }+common hw-polysemy-amazonka { build-depends: hw-polysemy:amazonka }+common hw-polysemy-core { build-depends: hw-polysemy:core }+common hw-polysemy-hedgehog { build-depends: hw-polysemy:hedgehog }+common hw-polysemy-testcontainers-localstack { build-depends: hw-polysemy:testcontainers-localstack } flag werror description: Enable -Werror@@ -201,6 +208,38 @@ hs-source-dirs: hedgehog default-language: Haskell2010 +library amazonka+ import: base, project-config,+ amazonka,+ hw-polysemy-core,+ resourcet,+ visibility: public+ exposed-modules: HaskellWorks.Polysemy.Amazonka+ hs-source-dirs: amazonka+ default-language: Haskell2010++library testcontainers-localstack+ import: base, project-config,+ amazonka,+ bytestring,+ generic-lens,+ http-conduit,+ hw-polysemy-amazonka,+ hw-polysemy-core,+ hw-polysemy-hedgehog,+ lens,+ resourcet,+ resourcet,+ testcontainers,+ text,+ time,+ visibility: public+ exposed-modules: HaskellWorks.Polysemy.Amazonka.LocalStack+ HaskellWorks.TestContainers.LocalStack+ HaskellWorks.TestContainers.LocalStack.Types+ hs-source-dirs: testcontainers-localstack+ default-language: Haskell2010+ library import: base, project-config, hw-polysemy-core,@@ -249,12 +288,21 @@ test-suite hw-polysemy-test import: base, project-config,+ amazonka,+ amazonka-s3, filepath,+ generic-lens,+ hw-polysemy-amazonka,+ hw-polysemy-core,+ hw-polysemy-testcontainers-localstack, hw-polysemy,- polysemy,+ lens, polysemy-log,+ polysemy,+ tasty-discover, tasty-hedgehog, tasty,+ testcontainers, text, default-language: Haskell2010 type: exitcode-stdio-1.0@@ -262,4 +310,6 @@ hs-source-dirs: test main-is: Main.hs other-modules: HaskellWorks.Polysemy.HedgehogSpec+ HaskellWorks.Polysemy.TestContainers.LocalStackSpec+ Test.Polysemy.Env ghc-options: -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T
+ test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}++{- HLINT ignore "Use let" -}++module HaskellWorks.Polysemy.TestContainers.LocalStackSpec+ ( tasty_local_stack+ ) where++import Prelude++import HaskellWorks.TestContainers.LocalStack+import Test.Polysemy.Env+import qualified Test.Tasty as Tasty+import qualified Test.Tasty.Hedgehog as H++import qualified Amazonka.S3 as AWS+import HaskellWorks.Polysemy.Amazonka+import HaskellWorks.Polysemy.Hedgehog+import HaskellWorks.Prelude+import Polysemy+import qualified TestContainers.Tasty as TC++{- HLINT ignore "Use camelCase" -}++tasty_local_stack :: Tasty.TestTree+tasty_local_stack =+ TC.withContainers setupContainers $ \start ->+ H.testProperty "Local stack test" $ propertyOnce $ runLocalTestEnv start $ do+ ep <- embed start+ jotShow_ ep+ listBucketsReq <- pure AWS.newListBuckets++ listBucketResp <- sendAws listBucketsReq+ & trapFail++ jotShow_ listBucketResp
+ test/Test/Polysemy/Env.hs view
@@ -0,0 +1,73 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeOperators #-}++{- HLINT ignore "Use let" -}++module Test.Polysemy.Env+ ( EnvironmentVariableMissing(..)+ , runLocalTestEnv+ , runTestEnv+ , runReaderFromEnvOrFail+ ) where++import qualified Amazonka as AWS+import HaskellWorks.Polysemy.Amazonka+import HaskellWorks.Polysemy.Amazonka.LocalStack+import HaskellWorks.Polysemy.Error+import HaskellWorks.Polysemy.Hedgehog+import HaskellWorks.Polysemy.System.Environment+import HaskellWorks.Prelude+import HaskellWorks.TestContainers.LocalStack+import Polysemy+import Polysemy.Error+import Polysemy.Reader++newtype EnvironmentVariableMissing =+ EnvironmentVariableMissing String+ deriving (Show, Eq)++runTestEnv :: ()+ => HasCallStack+ => Member (Embed IO) r+ => Member Hedgehog r+ => Sem+ ( Reader AWS.Env+ : r)+ a+ -> Sem r a+runTestEnv f =+ withFrozenCallStack $ f+ & runReaderAwsEnvDiscover++runLocalTestEnv :: ()+ => HasCallStack+ => Member (Embed IO) r+ => Member Hedgehog r+ => IO LocalStackEndpoint+ -> Sem+ ( Reader AWS.Env+ : r)+ a+ -> Sem r a+runLocalTestEnv mk f =+ withFrozenCallStack $ f+ & runReaderLocalAwsEnvDiscover mk++runReaderFromEnvOrFail :: forall i r a. ()+ => Member (Embed IO) r+ => Member Hedgehog r+ => (String -> i)+ -> String+ -> Sem (Reader i ': r) a+ -> Sem r a+runReaderFromEnvOrFail f envVar action = do+ env <- lookupEnv envVar+ & onNothingM (throw (EnvironmentVariableMissing envVar) & trapFail)++ runReader (f env) action
+ testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs view
@@ -0,0 +1,36 @@+{- HLINT ignore "Use let" -}++module HaskellWorks.Polysemy.Amazonka.LocalStack+ ( runReaderLocalAwsEnvDiscover+ ) where++import qualified Amazonka as AWS+import qualified Amazonka.Auth as AWS+import Control.Lens ((%~), (.~), (^.))+import Data.Generics.Product.Any+import HaskellWorks.Prelude+import HaskellWorks.TestContainers.LocalStack+import Polysemy+import Polysemy.Reader+import qualified System.IO as IO++runReaderLocalAwsEnvDiscover :: ()+ => Member (Embed IO) r+ => IO LocalStackEndpoint+ -> Sem (Reader AWS.Env : r) a+ -> Sem r a+runReaderLocalAwsEnvDiscover mk f = do+ ep <- embed mk++ logger' <- embed $ AWS.newLogger AWS.Debug IO.stdout++ let creds = AWS.fromKeys (AWS.AccessKey "test") (AWS.SecretKey "test")++ credEnv <- embed $ AWS.newEnv (AWS.runCredentialChain [pure . creds])++ awsEnv <- pure $+ credEnv+ & the @"logger" .~ logger'+ & the @"overrides" %~ (. AWS.setEndpoint False "localhost" (ep ^. the @"port"))++ runReader awsEnv f
+ testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs view
@@ -0,0 +1,75 @@+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}++{- HLINT ignore "Use camelCase" -}++module HaskellWorks.TestContainers.LocalStack+ ( LocalStackEndpoint(..)+ , setupContainers+ , waitForLocalStack+ ) where++import Prelude++import Control.Concurrent (threadDelay)+import Control.Exception (try)+import Control.Monad (when)+import Control.Monad.IO.Class+import qualified Data.ByteString.Lazy as LBS+import Data.Function+import qualified Data.Text as T+import Data.Time.Clock.POSIX (getPOSIXTime)+import HaskellWorks.TestContainers.LocalStack.Types (LocalStackEndpoint (LocalStackEndpoint))+import qualified HaskellWorks.TestContainers.LocalStack.Types as Z+import Network.HTTP.Conduit (HttpException,+ simpleHttp)+import qualified System.Environment as IO+import qualified TestContainers.Tasty as TC++-- | Sets up and runs the containers required for this test suite.+setupContainers :: TC.MonadDocker m => m LocalStackEndpoint+setupContainers = do+ authToken <- liftIO $ IO.lookupEnv "LOCALSTACK_AUTH_TOKEN"+ -- Launch the container based on the postgres image.+ localstackContainer <- TC.run $ TC.containerRequest (TC.fromTag "localstack/localstack-pro:3.1.0")+ & TC.setEnv [("LOCALSTACK_AUTH_TOKEN", maybe "" T.pack authToken)]+ -- Expose the port 4566 from within the container. The respective port+ -- on the host machine can be looked up using `containerPort` (see below).+ & TC.setExpose+ ( mconcat+ [ [ 4566 ]+ , fmap fromInteger [4510 .. 4559]+ ]+ )+ -- Wait until the container is ready to accept requests. `run` blocks until+ -- readiness can be established.+ & TC.setWaitingFor (TC.waitUntilMappedPortReachable 4566)++ -- Look up the corresponding port on the host machine for the exposed port 4566.+ let localStackPort = TC.containerPort localstackContainer 4566++ liftIO $ waitForLocalStack "localhost" localStackPort 8++ pure $ LocalStackEndpoint+ { Z.host = "0.0.0.0"+ , Z.port = localStackPort+ }++waitForLocalStack :: String -> Int -> Int -> IO ()+waitForLocalStack host port timeout = do+ startTime <- getPOSIXTime+ let url = "http://" ++ host ++ ":" ++ show port+ checkLoop startTime url+ where+ checkLoop startTime url = do+ result <- try $ simpleHttp url :: IO (Either HttpException LBS.ByteString)+ case result of+ Right _ -> putStrLn "LocalStack is ready!"+ Left _ -> do+ currentTime <- getPOSIXTime+ let elapsedTime = currentTime - startTime+ when (elapsedTime < fromIntegral timeout) $ do+ threadDelay 1000000 -- Wait for 1 second+ checkLoop startTime url+ when (elapsedTime >= fromIntegral timeout) $ do+ putStrLn "Timeout reached. LocalStack is not ready."
+ testcontainers-localstack/HaskellWorks/TestContainers/LocalStack/Types.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GADTs #-}++module HaskellWorks.TestContainers.LocalStack.Types+ ( LocalStackEndpoint(..)+ ) where++import HaskellWorks.Prelude++data LocalStackEndpoint = LocalStackEndpoint+ { host :: String+ , port :: Int+ } deriving (Eq, Show, Generic)