@@ -10,7 +10,7 @@ import Idris.AbsSyntax
10import Idris.Delaborate
10import Idris.Delaborate
11import Idris.ElabDecls
11import Idris.ElabDecls
12import Idris.ElabTerm
12import Idris.ElabTerm
13−import Idris.Parser
13+import Idris.Parser hiding (params)
14import Idris.Error
14import Idris.Error
15import Idris.DataOpts
15import Idris.DataOpts
16import Idris.Completion
16import Idris.Completion
@@ -21,6 +21,7 @@ import Text.Trifecta.Result(Result(..))
21import System.Console.Haskeline
21import System.Console.Haskeline
22import System.Console.Haskeline.History
22import System.Console.Haskeline.History
23import Control.Monad.State.Strict
23import Control.Monad.State.Strict
24+import Control.DeepSeq
25import Util.Pretty
26import Util.Pretty
26import Debug.Trace
27import Debug.Trace
@@ -200,6 +201,64 @@ ploop d prompt prf e h
200 when (not (null hs)) $ ifail "Incomplete proof"
201 when (not (null hs)) $ ifail "Incomplete proof"
201 iPrintResult "Proof completed!"
202 iPrintResult "Proof completed!"
202 return (False, e, True, prf)
203 return (False, e, True, prf)
204+ Success (TCheck (PRef _ n)) ->
205+ do ctxt <- getContext
209+ let h = idris_outh ist
210+ OK env = envAtFocus (proof e)
211+ ctxt' = envCtxt env ctxt
212+ bnd = map (\x -> (fst x, False)) env
213+ ist' = ist { tt_ctxt = ctxt' }
215+ -- Unlike the REPL, metavars have no special treatment, to
216+ -- make it easier to see how to prove with them.
217+ case lookupNames n ctxt' of
218+ [] -> ihPrintError h $ "No such variable " ++ show n
219+ ts -> ihPrintFunTypes h bnd n (map (\n -> (n, delabTy ist' n)) ts)
221+ return (False, e, False, prf))
222+ (\err -> do putIState ist ; ierror err)
223+ Success (TCheck t) ->
227+ let OK env = envAtFocus (proof e)
228+ ctxt' = envCtxt env ctxt
229+ putIState ist { tt_ctxt = ctxt' }
230+ (tm, ty) <- elabVal toplevel False t
231+ let imp = opt_showimp (idris_options ist)
232+ ty' = normaliseC ctxt [] ty
236+ ihPrintTermWithType h (prettyImp imp PType) type1Doc
237+ _ -> let bnd = map (\x -> (fst x, False)) env in
238+ ihPrintTermWithType h (pprintPTerm imp bnd (delab ist tm))
239+ (pprintPTerm imp bnd (delab ist ty))
241+ return (False, e, False, prf))
242+ (\err -> do putIState ist { tt_ctxt = ctxt } ; ierror err)
243+ Success (TEval t) -> withErrorReflection $
244+ do ctxt <- getContext
247+ let OK env = envAtFocus (proof e)
248+ ctxt' = envCtxt env ctxt
249+ ist' = ist { tt_ctxt = ctxt' }
250+ bnd = map (\x -> (fst x, False)) env
252+ (tm, ty) <- elabVal toplevel False t
253+ let tm' = force (normaliseAll ctxt' env tm)
254+ ty' = force (normaliseAll ctxt' env ty)
255+ imp = opt_showimp (idris_options ist')
256+ tmDoc = pprintPTerm imp bnd (delab ist' tm')
257+ tyDoc = pprintPTerm imp bnd (delab ist' ty')
258+ ihPrintTermWithType (idris_outh ist') tmDoc tyDoc
260+ return (False, e, False, prf))
261+ (\err -> do putIState ist ; ierror err)
203 Success tac -> do (_, e) <- elabStep e saveState
262 Success tac -> do (_, e) <- elabStep e saveState
204 (_, st) <- elabStep e (runTac True i tac)
263 (_, st) <- elabStep e (runTac True i tac)
205-- trace (show (problems (proof st))) $
264-- trace (show (problems (proof st))) $
@@ -211,4 +270,4 @@ ploop d prompt prf e h
211 if done then do (tm, _) <- elabStep st get_term
270 if done then do (tm, _) <- elabStep st get_term
212 return (tm, prf')
271 return (tm, prf')
213 else ploop d prompt prf' st h'
272 else ploop d prompt prf' st h'
214−
273+ where envCtxt env ctxt = foldl (\c (n, b) -> addTyDecl n Bound (binderTy b) c) ctxt env