1{-# LANGUAGE DeriveDataTypeable #-}
3module Idris.Error where
5import Prelude hiding (catch)
11import Idris.Core.Typecheck
12import Idris.Core.Constraints
14import System.Console.Haskeline
15import System.Console.Haskeline.MonadException
16import Control.Monad.State.Strict
17import Control.Monad.Error (throwError, catchError)
18import System.IO.Error(isUserError, ioeGetErrorString)
23iucheck = do tit <- typeInType
26 (tclift $ ucheck (idris_constraints ist)) `idrisCatch`
27 (\e -> do setErrSpan (getErrSpan e)
28 iputStrLn (pshow ist e))
30showErr :: Err -> Idris String
31showErr e = getIState >>= return . flip pshow e
34report :: IOError -> String
36 | isUserError e = ioeGetErrorString e
39idrisCatch :: Idris a -> (Err -> Idris a) -> Idris a
40idrisCatch = catchError
43setAndReport :: Err -> Idris ()
44setAndReport e = do ist <- getIState
45 let h = idris_outh ist
47 At fc e -> do setErrSpan fc
48 ihWarn h fc $ pprintErr ist e
49 _ -> do setErrSpan (getErrSpan e)
50 ihWarn h emptyFC $ pprintErr ist e
51 where unwrap (ProofSearchFail e) = e -- remove bookkeeping constructor
54ifail :: String -> Idris a
55ifail = throwError . Msg
57ierror :: Err -> Idris a
60tclift :: TC a -> Idris a
61tclift (OK v) = return v
62tclift (Error err@(At fc e)) = do setErrSpan fc; throwError err
63tclift (Error err) = throwError err
65tctry :: TC a -> TC a -> Idris a
69 Error err -> tclift tc2
71getErrSpan :: Err -> FC
72getErrSpan (At fc _) = fc
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list