data HSpec :: Effect where
ShouldBe :: (Show a, Eq a) => a -> a -> HSpec m ()
shouldBe :: (Show a, Eq a, HSpec :> es) => a -> a -> Eff lb ub es ()
shouldBe actual expected = send $ ShouldBe actual expected
runHSpec :: (lb Identity, IOE :> es) => Eff lb ub (HSpec : es) a -> Eff lb ub es a
runHSpec = interpret_ \case
ShouldBe actual expected -> liftIO $ actual `Test.shouldBe` expected
runTest :: Eff Anything Nonthing [HSpec, IOE, ExceptionalIO, Final IO] a -> Test.Expectation
runTest = void . runEffIO . runHSpec