@@ -11,6 +11,8 @@ import Idris.Core.TT
1111import Idris.Core.Evaluate
1212import Idris.Core.CaseTree
1313
14+import Idris.Error
15+
1416import Debug.Trace
1517
1618import Util.DynamicLinker
@@ -113,9 +115,9 @@ initState :: Idris ExecState
113115initState = do ist <- getIState
114116 return $ ExecState (idris_dynamic_libs ist)
115117
116−type Exec = ErrorT String (StateT ExecState IO)
118+type Exec = ErrorT Err (StateT ExecState IO)
117119
118−runExec :: Exec a -> ExecState -> IO (Either String a)
120+runExec :: Exec a -> ExecState -> IO (Either Err a)
119121runExec ex st = fst <$> runStateT (runErrorT ex) st
120122
121123getExecState :: Exec ExecState
@@ -124,7 +126,7 @@ getExecState = lift get
124126putExecState :: ExecState -> Exec ()
125127putExecState = lift . put
126128
127−execFail :: String -> Exec a
129+execFail :: Err -> Exec a
128130execFail = throwError
129131
130132execIO :: IO a -> Exec a
@@ -138,7 +140,7 @@ execute tm = do est <- initState
138140 do res <- doExec [] ctxt tm
139141 toTT res
140142 case res of
141− Left err -> fail err
143+ Left err -> ierror err
142144 Right tm' -> return tm'
143145
144146ioWrap :: ExecVal -> ExecVal
@@ -160,16 +162,16 @@ doExec env ctxt p@(P Ref n ty) =
160162 [CaseOp _ _ _ _ _ (CaseDefs _ ([], STerm tm) _ _)] -> -- nullary fun
161163 doExec env ctxt tm
162164 [CaseOp _ _ _ _ _ (CaseDefs _ (ns, sc) _ _)] -> return (EP Ref n EErased)
163− [] -> execFail $ "Could not find " ++ show n ++ " in definitions."
165+ [] -> execFail . Msg $ "Could not find " ++ show n ++ " in definitions."
164166 thing -> trace (take 200 $ "got to " ++ show thing ++ " lookup up " ++ show n) $ undefined
165167doExec env ctxt p@(P Bound n ty) =
166168 case lookup n env of
167− Nothing -> execFail "not found"
169+ Nothing -> execFail . Msg $ "not found"
168170 Just tm -> return tm
169171doExec env ctxt (P (DCon a b) n _) = return (EP (DCon a b) n EErased)
170172doExec env ctxt (P (TCon a b) n _) = return (EP (TCon a b) n EErased)
171173doExec env ctxt v@(V i) | i < length env = return (snd (env !! i))
172− | otherwise = execFail "env too small"
174+ | otherwise = execFail . Msg $ "env too small"
173175doExec env ctxt (Bind n (Let t v) body) = do v' <- doExec env ctxt v
174176 doExec ((n, v'):env) ctxt body
175177doExec env ctxt (Bind n (NLet t v) body) = trace "NLet" $ undefined
@@ -244,7 +246,7 @@ execApp env ctxt (EP _ fp _) (_:fn:EConstant (Str f):EConstant (Str mode):rest)
244246 (\e -> let _ = ( e::SomeException)
245247 in return $ Right (ioWrap (EPtr nullPtr), tail rest))
246248 case f of
247− Left err -> execFail err
249+ Left err -> execFail . Msg $ err
248250 Right (res, rest) -> execApp env ctxt res rest
249251
250252execApp env ctxt (EP _ fp _) (_:fn:(EHandle h):rest)