don't crash the main loop if error in eval
authorSimon Huber <hubsim@gmail.com>
Wed, 8 Apr 2015 22:42:29 +0000 (00:42 +0200)
committerSimon Huber <hubsim@gmail.com>
Wed, 8 Apr 2015 22:42:29 +0000 (00:42 +0200)
Main.hs

diff --git a/Main.hs b/Main.hs
index d873449dd939b9c9092b8f52973ad3b9122190fd..71fdab4432a9fce83add6b5a08cac02a53635ee7 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -2,6 +2,7 @@ module Main where
 
 import Control.Monad.Trans.Reader
 import Control.Monad.Error
+import Control.Exception (try)
 import Data.List
 import System.Directory
 import System.FilePath
@@ -126,7 +127,10 @@ loop flags f names tenv@(TC.TEnv _ rho _) = do
                            loop flags f names tenv
             Right _  -> do
               let e = E.eval rho body
-              outputStrLn ("EVAL: " ++ show e)
+              -- Let's not crash if the evaluation raises an error:
+              liftIO $ catch (putStrLn ("EVAL: " ++ show e))
+                             (\e -> putStrLn ("Exception: " ++
+                                              show (e :: SomeException)))
               loop flags f names tenv
 
 -- (not ok,loaded,already loaded defs) -> to load ->