polysemy-test-0.1.0.0: lib/Polysemy/Test/Data/Hedgehog.hs
{-# OPTIONS_HADDOCK hide #-}
module Polysemy.Test.Data.Hedgehog where
import Hedgehog (TestT)
import Polysemy (makeSem_)
-- |Convenience effect for embedding Hedgehog assertions.
data Hedgehog :: Effect where
LiftH :: TestT IO a -> Hedgehog m a
Assert :: Bool -> Hedgehog m ()
AssertEqual :: (Eq a, Show a) => a -> a -> Hedgehog m ()
EvalEither :: Show e => Either e a -> Hedgehog m a
AssertRight :: (Show e, Eq a, Show a) => a -> Either e a -> Hedgehog m ()
makeSem_ ''Hedgehog
-- |Lift a @'TestT' IO@ into Sem.
-- >>> liftH (Hedgehog.evalEither (Right 0))
liftH ::
∀ a r .
Member Hedgehog r =>
TestT IO a ->
Sem r a
-- |Embeds 'Hedgehog.assert'.
assert ::
∀ r .
Member Hedgehog r =>
Bool ->
Sem r ()
-- |Embeds 'Hedgehog.(===)'.
assertEqual ::
∀ a r .
Eq a =>
Show a =>
Member Hedgehog r =>
a ->
a ->
Sem r ()
-- |Alias for 'assertEqual'.
-- >>> 5 === 6
(===) ::
Eq a =>
Show a =>
Member Hedgehog r =>
a ->
a ->
Sem r ()
(===) =
assertEqual
-- |Embeds 'Hedgehog.evalEither'.
evalEither ::
∀ a e r .
Show e =>
Member Hedgehog r =>
Either e a ->
Sem r a
-- |Given a reference value, unpacks an 'Either' with 'evalEither' and applies 'assertEqual' to the result in the
-- 'Right' case, and produces a test failure in the 'Left' case.
assertRight ::
∀ a e r .
Show e =>
Eq a =>
Show a =>
Member Hedgehog r =>
a ->
Either e a ->
Sem r ()
data ValueIsNothing =
ValueIsNothing
deriving Show
assertJust ::
Eq a =>
Show a =>
Member Hedgehog r =>
a ->
Maybe a ->
Sem r ()
assertJust target =
assertRight target . maybeToRight ValueIsNothing
evalMaybe ::
Member Hedgehog r =>
Maybe a ->
Sem r a
evalMaybe =
evalEither . maybeToRight ValueIsNothing