✨ Add TryCatchOp support for runEvalIO
This commit is contained in:
@ -94,3 +94,8 @@ runEvalIO evalm = do
|
|||||||
runEvalIO' r db m
|
runEvalIO' r db m
|
||||||
Left e -> pure $ Left e
|
Left e -> pure $ Left e
|
||||||
runEvalIO' _ _ (Free (ErrorOp e)) = pure $ Left e
|
runEvalIO' _ _ (Free (ErrorOp e)) = pure $ Left e
|
||||||
|
runEvalIO' r db (Free (TryCatchOp m1 m2)) = do
|
||||||
|
result <- runEvalIO' r db m1
|
||||||
|
case result of
|
||||||
|
Right x -> pure $ Right x
|
||||||
|
Left _ -> runEvalIO' r db m2
|
||||||
|
@ -142,7 +142,23 @@ ioTests =
|
|||||||
getState
|
getState
|
||||||
|
|
||||||
r @?= Right [(ValInt 0, ValInt 5)],
|
r @?= Right [(ValInt 0, ValInt 5)],
|
||||||
--
|
---
|
||||||
|
testCase "TryCatch try1" $ do
|
||||||
|
r <- evalIO' (TryCatch (CstInt 1) (CstInt 2))
|
||||||
|
r @?= Right (ValInt 1),
|
||||||
|
---
|
||||||
|
testCase "TryCatch try2" $ do
|
||||||
|
r <- evalIO' (TryCatch (CstInt 1) (Div (CstInt 1) (CstInt 0)))
|
||||||
|
r @?= Right (ValInt 1),
|
||||||
|
---
|
||||||
|
testCase "TryCatch catch1" $ do
|
||||||
|
r <- evalIO' (TryCatch (Div (CstInt 1) (CstInt 0)) (CstInt 1))
|
||||||
|
r @?= Right (ValInt 1),
|
||||||
|
---
|
||||||
|
testCase "TryCatch catch2" $ do
|
||||||
|
r <- evalIO' (TryCatch (Div (CstInt 1) (CstInt 0)) (Div (CstInt 1) (CstInt 0)))
|
||||||
|
r @?= Left "Division by zero",
|
||||||
|
---
|
||||||
testCase "KvPutOp" $ do
|
testCase "KvPutOp" $ do
|
||||||
r <- evalIO' (KvPut (CstInt 1) (CstInt 2))
|
r <- evalIO' (KvPut (CstInt 1) (CstInt 2))
|
||||||
r @?= Right (ValInt 2),
|
r @?= Right (ValInt 2),
|
||||||
|
Reference in New Issue
Block a user