{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
module Main (main) where
import Effectful
import Effectful.Retry
import Test.Tasty
import Test.Tasty.HUnit
main :: IO ()
main =
defaultMain $
testGroup
"retry-effectful"
[ testCase "`retrying` works" $ do
res <- runRetryEff testRetrying
assertEqual "match" res 42
]
runRetryEff :: Eff '[Retry, IOE] a -> IO a
runRetryEff = runEff . runRetry
testRetrying :: (Retry :> es) => Eff es Int
testRetrying = do
retrying (constantDelay 100) chk (const $ pure 42)
where
chk _ 42 = pure False
chk _ _ = pure True