hw-polysemy 0.2.4.2 → 0.2.5.0
raw patch · 7 files changed
+108/−16 lines, 7 filesdep +exceptionsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: exceptions
API changes (from Hackage documentation)
- HaskellWorks.Polysemy.Hedgehog: hedgehogToIntegrationFinal :: () => Member (Final (PropertyT IO)) r => Sem (Hedgehog ': r) a -> Sem r a
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: hedgehogToIntegrationFinal :: () => Member (Final (PropertyT IO)) r => Sem (Hedgehog ': r) a -> Sem r a
+ HaskellWorks.Polysemy.Hedgehog: hedgehogToPropertyFinal :: () => Member (Final (PropertyT IO)) r => Sem (Hedgehog ': r) a -> Sem r a
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: hedgehogToMonadTestFinal :: () => MonadIO m => MonadCatch m => MonadTest 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.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: eval :: forall r_amJK a_amx4. (Member Hedgehog r_amJK, HasCallStack) => a_amx4 -> Sem r_amJK a_amx4
+ HaskellWorks.Polysemy.Hedgehog: eval :: forall r_amPm a_amCG. (Member Hedgehog r_amPm, HasCallStack) => a_amCG -> Sem r_amPm a_amCG
- HaskellWorks.Polysemy.Hedgehog: evalIO :: forall r_amJO a_amx8. (Member Hedgehog r_amJO, HasCallStack) => IO a_amx8 -> Sem r_amJO a_amx8
+ HaskellWorks.Polysemy.Hedgehog: evalIO :: forall r_amPq a_amCK. (Member Hedgehog r_amPq, HasCallStack) => IO a_amCK -> Sem r_amPq a_amCK
- HaskellWorks.Polysemy.Hedgehog: evalM :: forall r_amJM a_amx7. (Member Hedgehog r_amJM, HasCallStack) => Sem r_amJM a_amx7 -> Sem r_amJM a_amx7
+ HaskellWorks.Polysemy.Hedgehog: evalM :: forall r_amPo a_amCJ. (Member Hedgehog r_amPo, HasCallStack) => Sem r_amPo a_amCJ -> Sem r_amPo a_amCJ
- HaskellWorks.Polysemy.Hedgehog: failWith :: forall r_amJS a_amxc. (Member Hedgehog r_amJS, HasCallStack) => Maybe Diff -> String -> Sem r_amJS a_amxc
+ HaskellWorks.Polysemy.Hedgehog: failWith :: forall r_amPu a_amCO. (Member Hedgehog r_amPu, HasCallStack) => Maybe Diff -> String -> Sem r_amPu a_amCO
- HaskellWorks.Polysemy.Hedgehog: failWithCustom :: forall r_amJV a_amxe. Member Hedgehog r_amJV => CallStack -> Maybe Diff -> String -> Sem r_amJV a_amxe
+ HaskellWorks.Polysemy.Hedgehog: failWithCustom :: forall r_amPx a_amCQ. Member Hedgehog r_amPx => CallStack -> Maybe Diff -> String -> Sem r_amPx a_amCQ
- HaskellWorks.Polysemy.Hedgehog: propertyOnce :: () => Sem [Log, DataLog (LogEntry LogMessage), DataLog Text, GhcTime, Hedgehog, Embed IO, Embed (PropertyT IO), Final (PropertyT IO)] () -> Property
+ 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: writeLog :: forall r_amJQ. Member Hedgehog r_amJQ => Log -> Sem r_amJQ ()
+ HaskellWorks.Polysemy.Hedgehog: writeLog :: forall r_amPs. Member Hedgehog r_amPs => Log -> Sem r_amPs ()
- HaskellWorks.Polysemy.Hedgehog.Assert: evalIO :: forall r_amJO a_amx8. (Member Hedgehog r_amJO, HasCallStack) => IO a_amx8 -> Sem r_amJO a_amx8
+ HaskellWorks.Polysemy.Hedgehog.Assert: evalIO :: forall r_amPq a_amCK. (Member Hedgehog r_amPq, HasCallStack) => IO a_amCK -> Sem r_amPq a_amCK
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: assertEquals :: forall r_amJH a_X0. (Member Hedgehog r_amJH, HasCallStack, Eq a_X0, Show a_X0) => a_X0 -> a_X0 -> Sem r_amJH ()
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: assertEquals :: forall r_amPj a_X0. (Member Hedgehog r_amPj, HasCallStack, Eq a_X0, Show a_X0) => a_X0 -> a_X0 -> Sem r_amPj ()
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: eval :: forall r_amJK a_amx4. (Member Hedgehog r_amJK, HasCallStack) => a_amx4 -> Sem r_amJK a_amx4
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: eval :: forall r_amPm a_amCG. (Member Hedgehog r_amPm, HasCallStack) => a_amCG -> Sem r_amPm a_amCG
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalIO :: forall r_amJO a_amx8. (Member Hedgehog r_amJO, HasCallStack) => IO a_amx8 -> Sem r_amJO a_amx8
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalIO :: forall r_amPq a_amCK. (Member Hedgehog r_amPq, HasCallStack) => IO a_amCK -> Sem r_amPq a_amCK
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalM :: forall r_amJM a_amx7. (Member Hedgehog r_amJM, HasCallStack) => Sem r_amJM a_amx7 -> Sem r_amJM a_amx7
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: evalM :: forall r_amPo a_amCJ. (Member Hedgehog r_amPo, HasCallStack) => Sem r_amPo a_amCJ -> Sem r_amPo a_amCJ
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWith :: forall r_amJS a_amxc. (Member Hedgehog r_amJS, HasCallStack) => Maybe Diff -> String -> Sem r_amJS a_amxc
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWith :: forall r_amPu a_amCO. (Member Hedgehog r_amPu, HasCallStack) => Maybe Diff -> String -> Sem r_amPu a_amCO
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWithCustom :: forall r_amJV a_amxe. Member Hedgehog r_amJV => CallStack -> Maybe Diff -> String -> Sem r_amJV a_amxe
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: failWithCustom :: forall r_amPx a_amCQ. Member Hedgehog r_amPx => CallStack -> Maybe Diff -> String -> Sem r_amPx a_amCQ
- HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: writeLog :: forall r_amJQ. Member Hedgehog r_amJQ => Log -> Sem r_amJQ ()
+ HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog: writeLog :: forall r_amPs. Member Hedgehog r_amPs => Log -> Sem r_amPs ()
- HaskellWorks.Polysemy.Hedgehog.Eval: eval :: forall r_amJK a_amx4. (Member Hedgehog r_amJK, HasCallStack) => a_amx4 -> Sem r_amJK a_amx4
+ HaskellWorks.Polysemy.Hedgehog.Eval: eval :: forall r_amPm a_amCG. (Member Hedgehog r_amPm, HasCallStack) => a_amCG -> Sem r_amPm a_amCG
- HaskellWorks.Polysemy.Hedgehog.Eval: evalIO :: forall r_amJO a_amx8. (Member Hedgehog r_amJO, HasCallStack) => IO a_amx8 -> Sem r_amJO a_amx8
+ HaskellWorks.Polysemy.Hedgehog.Eval: evalIO :: forall r_amPq a_amCK. (Member Hedgehog r_amPq, HasCallStack) => IO a_amCK -> Sem r_amPq a_amCK
- HaskellWorks.Polysemy.Hedgehog.Eval: evalM :: forall r_amJM a_amx7. (Member Hedgehog r_amJM, HasCallStack) => Sem r_amJM a_amx7 -> Sem r_amJM a_amx7
+ HaskellWorks.Polysemy.Hedgehog.Eval: evalM :: forall r_amPo a_amCJ. (Member Hedgehog r_amPo, HasCallStack) => Sem r_amPo a_amCJ -> Sem r_amPo a_amCJ
- HaskellWorks.Polysemy.Hedgehog.Property: propertyOnce :: () => Sem [Log, DataLog (LogEntry LogMessage), DataLog Text, GhcTime, Hedgehog, Embed IO, Embed (PropertyT IO), Final (PropertyT IO)] () -> 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
Files
- core/HaskellWorks/Polysemy/System/IO.hs +4/−4
- hedgehog/HaskellWorks/Polysemy/Hedgehog.hs +1/−1
- hedgehog/HaskellWorks/Polysemy/Hedgehog/Effect/Hedgehog.hs +23/−4
- hedgehog/HaskellWorks/Polysemy/Hedgehog/Property.hs +4/−1
- hedgehog/HaskellWorks/Polysemy/Hedgehog/Test.hs +48/−0
- hw-polysemy.cabal +5/−1
- test/HaskellWorks/Polysemy/HedgehogSpec.hs +23/−5
core/HaskellWorks/Polysemy/System/IO.hs view
@@ -1,12 +1,12 @@ module HaskellWorks.Polysemy.System.IO- ( IO.BufferMode,+ ( IO.BufferMode(..), IO.FilePath, IO.Handle, IO.HandlePosn, IO.IO,- IO.IOMode,- IO.NewlineMode,- IO.SeekMode,+ IO.IOMode(..),+ IO.NewlineMode(..),+ IO.SeekMode(..), IO.TextEncoding, String,
hedgehog/HaskellWorks/Polysemy/Hedgehog.hs view
@@ -4,7 +4,7 @@ Hedgehog, - hedgehogToIntegrationFinal,+ hedgehogToPropertyFinal, interpretDataLogHedgehog, leftFail,
hedgehog/HaskellWorks/Polysemy/Hedgehog/Effect/Hedgehog.hs view
@@ -12,7 +12,9 @@ , failWith , failWithCustom - , hedgehogToIntegrationFinal+ , hedgehogToMonadTestFinal+ , hedgehogToPropertyFinal+ , hedgehogToTestFinal ) where @@ -22,6 +24,8 @@ import qualified Hedgehog as H import qualified Hedgehog.Internal.Property as H +import qualified Control.Monad.Catch as IO+import qualified Control.Monad.IO.Class as IO import qualified HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog.Internal as I import Polysemy import Polysemy.Final@@ -61,11 +65,14 @@ makeSem ''Hedgehog -hedgehogToIntegrationFinal :: ()- => Member (Final (H.PropertyT IO)) r+hedgehogToMonadTestFinal :: ()+ => IO.MonadIO m+ => IO.MonadCatch m+ => H.MonadTest m+ => Member (Final m) r => Sem (Hedgehog ': r) a -> Sem r a-hedgehogToIntegrationFinal = interpretFinal \case+hedgehogToMonadTestFinal = interpretFinal \case AssertEquals a b -> liftS $ a H.=== b Eval a ->@@ -81,3 +88,15 @@ liftS $ I.failWithCustom cs mdiff msg WriteLog logValue -> liftS $ H.writeLog logValue++hedgehogToPropertyFinal :: ()+ => Member (Final (H.PropertyT IO)) r+ => Sem (Hedgehog ': r) a+ -> Sem r a+hedgehogToPropertyFinal = hedgehogToMonadTestFinal++hedgehogToTestFinal :: ()+ => Member (Final (H.TestT IO)) r+ => Sem (Hedgehog ': r) a+ -> Sem r a+hedgehogToTestFinal = hedgehogToMonadTestFinal
hedgehog/HaskellWorks/Polysemy/Hedgehog/Property.hs view
@@ -16,6 +16,7 @@ import Polysemy import Polysemy.Embed import Polysemy.Log+import Polysemy.Resource import Polysemy.Time.Interpreter.Ghc propertyOnce :: ()@@ -27,6 +28,7 @@ , Hedgehog , Embed IO , Embed (H.PropertyT IO)+ , Resource , Final (H.PropertyT IO) ] () -> H.Property@@ -36,9 +38,10 @@ & interpretDataLogHedgehog formatLogEntry getLogEntryCallStack & interpretDataLogHedgehog id (const GHC.callStack) & interpretTimeGhc- & hedgehogToIntegrationFinal+ & hedgehogToPropertyFinal & runEmbedded liftIO & embedToFinal @(H.PropertyT IO)+ & runResource & runFinal & H.property & H.withTests 1
+ hedgehog/HaskellWorks/Polysemy/Hedgehog/Test.hs view
@@ -0,0 +1,48 @@+module HaskellWorks.Polysemy.Hedgehog.Test+ ( Property+ , test++ ) where++import qualified GHC.Stack as GHC+import HaskellWorks.Polysemy.Prelude++import Hedgehog (Property)+import qualified Hedgehog as H++import Control.Monad.IO.Class (liftIO)+import HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog+import HaskellWorks.Polysemy.Hedgehog.Effect.Log+import Polysemy+import Polysemy.Embed+import Polysemy.Log+import Polysemy.Resource+import Polysemy.Time.Interpreter.Ghc++test :: ()+ => Sem+ [ Log+ , DataLog (LogEntry LogMessage)+ , DataLog Text+ , GhcTime+ , Hedgehog+ , Embed IO+ , Embed (H.TestT IO)+ , Resource+ , Final (H.TestT IO)+ ] ()+ -> H.Property+test f = f+ & interpretLogDataLog+ & setLogLevel (Just Info)+ & interpretDataLogHedgehog formatLogEntry getLogEntryCallStack+ & interpretDataLogHedgehog id (const GHC.callStack)+ & interpretTimeGhc+ & hedgehogToTestFinal+ & runEmbedded liftIO+ & embedToFinal @(H.TestT IO)+ & runResource+ & runFinal+ & H.test+ & H.property+ & H.withTests 1
hw-polysemy.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: hw-polysemy-version: 0.2.4.2+version: 0.2.5.0 synopsis: Opinionated polysemy library description: Opinionated polysemy library. license: Apache-2.0@@ -25,6 +25,7 @@ common contravariant { build-depends: contravariant < 1.6 } common Diff { build-depends: Diff < 0.6 } common directory { build-depends: directory < 1.4 }+common exceptions { build-depends: exceptions < 0.11 } 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 }@@ -151,6 +152,7 @@ bytestring, contravariant, Diff,+ exceptions, filepath, generic-lens, ghc-prim,@@ -174,6 +176,7 @@ HaskellWorks.Polysemy.Hedgehog.Process HaskellWorks.Polysemy.Hedgehog.Process.Internal HaskellWorks.Polysemy.Hedgehog.Property+ HaskellWorks.Polysemy.Hedgehog.Test HaskellWorks.Polysemy.Hedgehog.Workspace HaskellWorks.Polysemy.Hedgehog.Workspace.Types hs-source-dirs: hedgehog@@ -215,6 +218,7 @@ HaskellWorks.Polysemy.Hedgehog.Process, HaskellWorks.Polysemy.Hedgehog.Process.Internal, HaskellWorks.Polysemy.Hedgehog.Property,+ HaskellWorks.Polysemy.Hedgehog.Test, HaskellWorks.Polysemy.Hedgehog.Workspace, HaskellWorks.Polysemy.Prelude, HaskellWorks.Polysemy.String,
test/HaskellWorks/Polysemy/HedgehogSpec.hs view
@@ -3,19 +3,37 @@ {-# LANGUAGE TypeApplications #-} module HaskellWorks.Polysemy.HedgehogSpec- ( hprop_example+ ( hprop_example_property+ , hprop_example_test ) where import HaskellWorks.Polysemy.Prelude -import qualified Data.List as L-import qualified HaskellWorks.Polysemy.Data.Text as T+import qualified Data.List as L+import qualified HaskellWorks.Polysemy.Data.Text as T import HaskellWorks.Polysemy.Hedgehog+import HaskellWorks.Polysemy.Hedgehog.Test default (String) -hprop_example :: Property-hprop_example = propertyOnce $ do+hprop_example_property :: Property+hprop_example_property = propertyOnce $ do+ let projectRoot = "."++ contents <- T.readFile (projectRoot </> "LICENSE")+ & trapFail @IOException++ line1 <- T.lines contents+ & L.dropWhile T.null+ & requireHead+ & jotShowM++ let text = T.strip line1++ text === "Apache License"++hprop_example_test :: Property+hprop_example_test = test $ do let projectRoot = "." contents <- T.readFile (projectRoot </> "LICENSE")