From b223a6c2d0d0e812c4d77c062cc82ac7df8f8eca Mon Sep 17 00:00:00 2001 From: Vaibhav Sagar Date: Sun, 21 Apr 2024 22:08:20 +1000 Subject: [PATCH] IHaskell.Eval.Evaluate: catch exceptions in extractValue (#1486) * IHaskell.Eval.Evaluate: catch exceptions in extractValue * IHaskell.Eval.Evaluate: only catch exceptions for GHC >=9.0 --- src/IHaskell/Eval/Evaluate.hs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/IHaskell/Eval/Evaluate.hs b/src/IHaskell/Eval/Evaluate.hs index 61a6d19d..7fa833c0 100644 --- a/src/IHaskell/Eval/Evaluate.hs +++ b/src/IHaskell/Eval/Evaluate.hs @@ -516,10 +516,19 @@ evaluate kernelState code output widgetHandler = do -- from inside the notebook environment. extractValue :: Typeable a => String -> Interpreter (Either String a) extractValue expr = do +#if MIN_VERSION_ghc(9,0,0) + compiled <- gcatch (Right <$> dynCompileExpr expr) (\exc -> return (Left (show exc))) + case compiled of + Left exc -> return (Left exc) + Right dyn -> case fromDynamic dyn of + Nothing -> return (Left multipleIHaskells) + Just result -> return (Right result) +#else compiled <- dynCompileExpr expr case fromDynamic compiled of Nothing -> return (Left multipleIHaskells) Just result -> return (Right result) +#endif where multipleIHaskells =