diff --git a/components/core/Effectful/Zoo/FileSystem.hs b/components/core/Effectful/Zoo/FileSystem.hs
--- a/components/core/Effectful/Zoo/FileSystem.hs
+++ b/components/core/Effectful/Zoo/FileSystem.hs
@@ -17,6 +17,7 @@
     runFileSystem,
 
     getCurrentDirectory,
+    listDirectory,
     canonicalizePath,
   ) where
 
@@ -204,3 +205,17 @@
   unsafeFileSystemEff_ (D.canonicalizePath fp)
     & trapIO @IOException throw
 {-# INLINE canonicalizePath #-}
+
+listDirectory :: ()
+  => HasCallStack
+  => r <: Error IOException
+  => r <: FileSystem
+  => r <: Log Text
+  => FilePath
+  -> Eff r [FilePath]
+listDirectory fp = withFrozenCallStack do
+  info $ "Calling: listDirectory " <> tshow fp
+
+  unsafeFileSystemEff_ (D.listDirectory fp)
+    & trapIO @IOException throw
+{-# INLINE listDirectory #-}
diff --git a/components/hedgehog/Effectful/Zoo/Hedgehog/Api/Tasty/Orphans.hs b/components/hedgehog/Effectful/Zoo/Hedgehog/Api/Tasty/Orphans.hs
--- a/components/hedgehog/Effectful/Zoo/Hedgehog/Api/Tasty/Orphans.hs
+++ b/components/hedgehog/Effectful/Zoo/Hedgehog/Api/Tasty/Orphans.hs
@@ -15,4 +15,5 @@
     where testName = fromMaybe "" $ getLast info.name
 
 instance Tasty (TestT IO ()) where
-  tasty info = tasty info . H.test
+  tasty info = pure . testProperty testName . H.withTests 1 . H.property . H.test
+    where testName = fromMaybe "" $ getLast info.name
diff --git a/components/hedgehog/Effectful/Zoo/Hedgehog/Effect/Run.hs b/components/hedgehog/Effectful/Zoo/Hedgehog/Effect/Run.hs
--- a/components/hedgehog/Effectful/Zoo/Hedgehog/Effect/Run.hs
+++ b/components/hedgehog/Effectful/Zoo/Hedgehog/Effect/Run.hs
@@ -75,8 +75,8 @@
               Nothing -> do
                 mResult <- CC.tryTakeTMVar tvResult
                 case mResult of
-                  Nothing -> pure Nothing
                   Just a -> pure $ Just $ Right a
+                  Nothing -> retry
               Just action -> pure $ Just $ Left action
 
           case mActionOrResult of
@@ -132,8 +132,8 @@
               Nothing -> do
                 mResult <- CC.tryTakeTMVar tvResult
                 case mResult of
-                  Nothing -> pure Nothing
                   Just a -> pure $ Just $ Right a
+                  Nothing -> retry
               Just action -> pure $ Just $ Left action
 
           case mActionOrResult of
diff --git a/effectful-zoo.cabal b/effectful-zoo.cabal
--- a/effectful-zoo.cabal
+++ b/effectful-zoo.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.4
 
 name:                   effectful-zoo
-version:                0.0.3.0
+version:                0.0.3.1
 synopsis:               Effectful effects for testing
 description:            See https://hackage.haskell.org/package/effectful-zoo/docs/effectful-zoo.html
 category:               Development
