@@ -49,6 +49,8 @@ import IRTS.Compiler
49import IRTS.CodegenCommon
49import IRTS.CodegenCommon
50import IRTS.System
50import IRTS.System
52+import Control.Category
53+import Prelude hiding ((.), id)
52import Data.List.Split (splitOn)
54import Data.List.Split (splitOn)
53import Data.List (groupBy)
55import Data.List (groupBy)
54import qualified Data.Text as T
56import qualified Data.Text as T
@@ -681,6 +683,7 @@ process h fn (NewDefn decls) = logLvl 3 ("Defining names using these decls: " ++
681 defineName (tyDecl@(PTy docs argdocs syn fc opts name ty) : decls) = do
683 defineName (tyDecl@(PTy docs argdocs syn fc opts name ty) : decls) = do
682 elabDecl EAll toplevel tyDecl
684 elabDecl EAll toplevel tyDecl
683 elabClauses toplevel fc opts name (concatMap getClauses decls)
685 elabClauses toplevel fc opts name (concatMap getClauses decls)
686+ setReplDefined (getName tyDecl)
684 defineName [PClauses fc opts _ [clause]] = do
687 defineName [PClauses fc opts _ [clause]] = do
685 let pterm = getRHS clause
688 let pterm = getRHS clause
686 (tm,ty) <- elabVal toplevel ERHS pterm
689 (tm,ty) <- elabVal toplevel ERHS pterm
@@ -688,8 +691,10 @@ process h fn (NewDefn decls) = logLvl 3 ("Defining names using these decls: " ++
688 let tm' = force (normaliseAll ctxt [] tm)
691 let tm' = force (normaliseAll ctxt [] tm)
689 let ty' = force (normaliseAll ctxt [] ty)
692 let ty' = force (normaliseAll ctxt [] ty)
690 updateContext (addCtxtDef (getClauseName clause) (Function ty' tm'))
693 updateContext (addCtxtDef (getClauseName clause) (Function ty' tm'))
694+ setReplDefined (Just $ getClauseName clause)
691− defineName [PData doc argdocs syn fc opts decl] = do
695+ defineName [def @ (PData doc argdocs syn fc opts decl)] = do
692 elabData toplevel syn doc argdocs fc opts decl
696 elabData toplevel syn doc argdocs fc opts decl
697+ setReplDefined (getName def)
693 getClauses (PClauses fc opts name clauses) = clauses
698 getClauses (PClauses fc opts name clauses) = clauses
694 getClauses _ = []
699 getClauses _ = []
695 getRHS :: PClause -> PTerm
700 getRHS :: PClause -> PTerm
@@ -697,6 +702,27 @@ process h fn (NewDefn decls) = logLvl 3 ("Defining names using these decls: " ++
697 getRHS (PWith fc name whole with rhs whereBlock) = rhs
702 getRHS (PWith fc name whole with rhs whereBlock) = rhs
698 getRHS (PClauseR fc with rhs whereBlock) = rhs
703 getRHS (PClauseR fc with rhs whereBlock) = rhs
699 getRHS (PWithR fc with rhs whereBlock) = rhs
704 getRHS (PWithR fc with rhs whereBlock) = rhs
705+ setReplDefined :: Maybe Name -> Idris ()
706+ setReplDefined Nothing = return ()
707+ setReplDefined (Just n) = do
709+ put oldState { idris_repl_defs = n : idris_repl_defs oldState }
711+process h fn (Undefine names) = undefine names
713+ undefine :: [Name] -> Idris ()
715+ allDefined <- idris_repl_defs `fmap` get
716+ undefine' allDefined
717+ undefine names = undefine' names
718+ undefine' [] = return ()
719+ undefine' (n:names) = do
720+ allDefined <- idris_repl_defs `fmap` get
721+ if n `elem` allDefined
722+ then fputState (ctxt_lookup n . known_terms) Nothing
723+ else tclift $ tfail $ Msg ("Can't undefine " ++ show n ++ " because it wasn't defined at the repl")
724+ fmodifyState repl_definitions (delete n)
701process h fn (ExecVal t)
727process h fn (ExecVal t)
702 = do ctxt <- getContext
728 = do ctxt <- getContext