on master help sign in
Reorder the monad transformers in the Idris monad to allow completion

Completion of names will require access to the interpreter state. Unfortunately, the stacking order of the monad transformers didn't allow this. This has been changed. As a side effect, when get was used to access the state, it has been consistently replaced with getIState.

commite49ab72e6dced22e1b398f4bae7ddbe1b950e714 authorDavid Christiansen <david@davidchristiansen.dk> dateFri 8 Feb 2013, 15:04 (14 years ago) parentf868390
12 files changed+216−206
src/Core/ProofShell.hs+3−1 src/IRTS/Compiler.hs+3−3 src/Idris/AbsSyntax.hs+94−94 src/Idris/AbsSyntaxTree.hs+1−1 src/Idris/Coverage.hs+9−9 src/Idris/ElabDecls.hs+39−39 src/Idris/Error.hs+3−3 src/Idris/Parser.hs+6−6 src/Idris/Prover.hs+7−7 src/Idris/REPL.hs+48−40 src/Idris/UnusedArgs.hs+2−2 src/Main.hs+1−1
src/Core/ProofShell.hs+3−1
@@ -11,6 +11,8 @@ import Core.Elaborate
1111import Control.Monad.State
1212import System.Console.Haskeline
1313
14+import Idris.AbsSyntaxTree (Idris)
15+
1416import Util.Pretty
1517
1618data ShellState = ShellState
@@ -55,7 +57,7 @@ processCommand (Tac e) state
5557 err -> (state, show err)
5658 | otherwise = (state, "No proof in progress")
5759
58−runShell :: ShellState -> InputT IO ShellState
60+runShell :: ShellState -> Idris ShellState
5961runShell st = do (prompt, parser) <-
6062 maybe (return ("TT# ", parseCommand))
6163 (\st -> do outputStrLn . render . pretty $ st
src/IRTS/Compiler.hs+3−3
@@ -73,7 +73,7 @@ compile target f tm
7373 Bytecode -> liftIO $ dumpBC c f
7474 ToJavaScript -> liftIO $ codegenJavaScript c f outty
7575 Error e -> fail $ show e
76− where checkMVs = do i <- get
76+ where checkMVs = do i <- getIState
7777 case idris_metavars i \\ primDefs of
7878 [] -> return ()
7979 ms -> fail $ "There are undefined metavariables: " ++ show ms
@@ -91,7 +91,7 @@ irMain tm = do i <- ir tm
9191
9292allNames :: [Name] -> Name -> Idris [Name]
9393allNames ns n | n `elem` ns = return []
94−allNames ns n = do i <- get
94+allNames ns n = do i <- getIState
9595 case lookupCtxt Nothing n (idris_callgraph i) of
9696 [ns'] -> do more <- mapM (allNames (n:ns)) (map fst (calls ns'))
9797 return (nub (n : concat more))
@@ -193,7 +193,7 @@ instance ToIR (TT Name) where
193193 | (P (DCon t a) n _, args) <- unApply tm
194194 = irCon env t a n args
195195 | (P _ n _, args) <- unApply tm
196− = do i <- get
196+ = do i <- getIState
197197 args' <- mapM (ir' env) args
198198 case getPrim i n args' of
199199 Just tm -> return tm
src/Idris/AbsSyntax.hs+94−94
@@ -26,57 +26,57 @@ import Util.Pretty
2626
2727
2828getContext :: Idris Context
29−getContext = do i <- get; return (tt_ctxt i)
29+getContext = do i <- getIState; return (tt_ctxt i)
3030
3131getObjectFiles :: Idris [FilePath]
32−getObjectFiles = do i <- get; return (idris_objs i)
32+getObjectFiles = do i <- getIState; return (idris_objs i)
3333
3434addObjectFile :: FilePath -> Idris ()
35−addObjectFile f = do i <- get; put (i { idris_objs = f : idris_objs i })
35+addObjectFile f = do i <- getIState; putIState $ i { idris_objs = f : idris_objs i }
3636
3737getLibs :: Idris [String]
38−getLibs = do i <- get; return (idris_libs i)
38+getLibs = do i <- getIState; return (idris_libs i)
3939
4040addLib :: String -> Idris ()
41−addLib f = do i <- get; put (i { idris_libs = f : idris_libs i })
41+addLib f = do i <- getIState; putIState $ i { idris_libs = f : idris_libs i }
4242
4343addHdr :: String -> Idris ()
44−addHdr f = do i <- get; put (i { idris_hdrs = f : idris_hdrs i })
44+addHdr f = do i <- getIState; putIState $ i { idris_hdrs = f : idris_hdrs i }
4545
4646totcheck :: (FC, Name) -> Idris ()
47−totcheck n = do i <- get; put (i { idris_totcheck = idris_totcheck i ++ [n] })
47+totcheck n = do i <- getIState; putIState $ i { idris_totcheck = idris_totcheck i ++ [n] }
4848
4949setFlags :: Name -> [FnOpt] -> Idris ()
50−setFlags n fs = do i <- get; put (i { idris_flags = addDef n fs (idris_flags i) })
50+setFlags n fs = do i <- getIState; putIState $ i { idris_flags = addDef n fs (idris_flags i) }
5151
5252setAccessibility :: Name -> Accessibility -> Idris ()
5353setAccessibility n a
54− = do i <- get
54+ = do i <- getIState
5555 let ctxt = setAccess n a (tt_ctxt i)
56− put (i { tt_ctxt = ctxt })
56+ putIState $ i { tt_ctxt = ctxt }
5757
5858setTotality :: Name -> Totality -> Idris ()
5959setTotality n a
60− = do i <- get
60+ = do i <- getIState
6161 let ctxt = setTotal n a (tt_ctxt i)
62− put (i { tt_ctxt = ctxt })
62+ putIState $ i { tt_ctxt = ctxt }
6363
6464getTotality :: Name -> Idris Totality
6565getTotality n
66− = do i <- get
66+ = do i <- getIState
6767 case lookupTotal n (tt_ctxt i) of
6868 [t] -> return t
6969 _ -> return (Total [])
7070
7171addToCG :: Name -> CGInfo -> Idris ()
7272addToCG n cg
73− = do i <- get
74− put (i { idris_callgraph = addDef n cg (idris_callgraph i) })
73+ = do i <- getIState
74+ putIState $ i { idris_callgraph = addDef n cg (idris_callgraph i) }
7575
7676addDocStr :: Name -> String -> Idris ()
7777addDocStr n doc
78− = do i <- get
79− put (i { idris_docstrings = addDef n doc (idris_docstrings i) })
78+ = do i <- getIState
79+ putIState $ i { idris_docstrings = addDef n doc (idris_docstrings i) }
8080
8181addToCalledG :: Name -> [Name] -> Idris ()
8282addToCalledG n ns = return () -- TODO
@@ -87,13 +87,13 @@ addToCalledG n ns = return () -- TODO
8787
8888addInstance :: Bool -> Name -> Name -> Idris ()
8989addInstance int n i
90− = do ist <- get
90+ = do ist <- getIState
9191 case lookupCtxt Nothing n (idris_classes ist) of
9292 [CI a b c d ins] ->
9393 do let cs = addDef n (CI a b c d (addI i ins)) (idris_classes ist)
94− put (ist { idris_classes = cs })
94+ putIState $ ist { idris_classes = cs }
9595 _ -> do let cs = addDef n (CI (MN 0 "none") [] [] [] [i]) (idris_classes ist)
96− put (ist { idris_classes = cs })
96+ putIState $ ist { idris_classes = cs }
9797 where addI i ins | int = i : ins
9898 | chaser n = ins ++ [i]
9999 | otherwise = insI i ins
@@ -107,56 +107,56 @@ addInstance int n i
107107
108108addClass :: Name -> ClassInfo -> Idris ()
109109addClass n i
110− = do ist <- get
110+ = do ist <- getIState
111111 let i' = case lookupCtxt Nothing n (idris_classes ist) of
112112 [c] -> c { class_instances = class_instances i }
113113 _ -> i
114− put (ist { idris_classes = addDef n i' (idris_classes ist) })
114+ putIState $ ist { idris_classes = addDef n i' (idris_classes ist) }
115115
116116addIBC :: IBCWrite -> Idris ()
117117addIBC ibc@(IBCDef n)
118− = do i <- get
118+ = do i <- getIState
119119 when (notDef (ibc_write i)) $
120− put (i { ibc_write = ibc : ibc_write i })
120+ putIState $ i { ibc_write = ibc : ibc_write i }
121121 where notDef [] = True
122122 notDef (IBCDef n': is) | n == n' = False
123123 notDef (_ : is) = notDef is
124−addIBC ibc = do i <- get; put (i { ibc_write = ibc : ibc_write i })
124+addIBC ibc = do i <- getIState; putIState $ i { ibc_write = ibc : ibc_write i }
125125
126126clearIBC :: Idris ()
127−clearIBC = do i <- get; put (i { ibc_write = [] })
127+clearIBC = do i <- getIState; putIState $ i { ibc_write = [] }
128128
129129getHdrs :: Idris [String]
130−getHdrs = do i <- get; return (idris_hdrs i)
130+getHdrs = do i <- getIState; return (idris_hdrs i)
131131
132132setErrLine :: Int -> Idris ()
133−setErrLine x = do i <- get;
133+setErrLine x = do i <- getIState;
134134 case (errLine i) of
135− Nothing -> put (i { errLine = Just x })
135+ Nothing -> putIState $ i { errLine = Just x }
136136 Just _ -> return ()
137137
138138clearErr :: Idris ()
139−clearErr = do i <- get
140− put (i { errLine = Nothing })
139+clearErr = do i <- getIState
140+ putIState $ i { errLine = Nothing }
141141
142142getSO :: Idris (Maybe String)
143−getSO = do i <- get
143+getSO = do i <- getIState
144144 return (compiled_so i)
145145
146146setSO :: Maybe String -> Idris ()
147−setSO s = do i <- get
148− put (i { compiled_so = s })
147+setSO s = do i <- getIState
148+ putIState $ (i { compiled_so = s })
149149
150150getIState :: Idris IState
151−getIState = get
151+getIState = lift get
152152
153153putIState :: IState -> Idris ()
154−putIState = put
154+putIState = lift . put
155155
156156getName :: Idris Int
157−getName = do i <- get;
157+getName = do i <- getIState;
158158 let idx = idris_name i;
159− put (i { idris_name = idx + 1 })
159+ putIState $ (i { idris_name = idx + 1 })
160160 return idx
161161
162162checkUndefined :: FC -> Name -> Idris ()
@@ -175,24 +175,24 @@ isUndefined fc n
175175 _ -> return True
176176
177177setContext :: Context -> Idris ()
178−setContext ctxt = do i <- get; put (i { tt_ctxt = ctxt } )
178+setContext ctxt = do i <- getIState; putIState $ (i { tt_ctxt = ctxt } )
179179
180180updateContext :: (Context -> Context) -> Idris ()
181−updateContext f = do i <- get; put (i { tt_ctxt = f (tt_ctxt i) } )
181+updateContext f = do i <- getIState; putIState $ (i { tt_ctxt = f (tt_ctxt i) } )
182182
183183addConstraints :: FC -> (Int, [UConstraint]) -> Idris ()
184184addConstraints fc (v, cs)
185− = do i <- get
185+ = do i <- getIState
186186 let ctxt = tt_ctxt i
187187 let ctxt' = ctxt { uconstraints = cs ++ uconstraints ctxt,
188188 next_tvar = v }
189189 let ics = zip cs (repeat fc) ++ idris_constraints i
190− put (i { tt_ctxt = ctxt', idris_constraints = ics })
190+ putIState $ i { tt_ctxt = ctxt', idris_constraints = ics }
191191
192192addDeferred :: [(Name, Type)] -> Idris ()
193193addDeferred ns = do mapM_ (\(n, t) -> updateContext (addTyDecl n (tidyNames [] t))) ns
194− i <- get
195− put (i { idris_metavars = map fst ns ++ idris_metavars i })
194+ i <- getIState
195+ putIState $ i { idris_metavars = map fst ns ++ idris_metavars i }
196196 where tidyNames used (Bind (MN i x) b sc)
197197 = let n' = uniqueName (UN x) used in
198198 Bind n' b $ tidyNames (n':used) sc
@@ -202,8 +202,8 @@ addDeferred ns = do mapM_ (\(n, t) -> updateContext (addTyDecl n (tidyNames [] t
202202 tidyNames used b = b
203203
204204solveDeferred :: Name -> Idris ()
205−solveDeferred n = do i <- get
206− put (i { idris_metavars = idris_metavars i \\ [n] })
205+solveDeferred n = do i <- getIState
206+ putIState $ i { idris_metavars = idris_metavars i \\ [n] }
207207
208208iputStrLn :: String -> Idris ()
209209iputStrLn = liftIO . putStrLn
@@ -212,164 +212,164 @@ iWarn :: FC -> String -> Idris ()
212212iWarn fc err = liftIO $ putStrLn (show fc ++ ":" ++ err)
213213
214214setLogLevel :: Int -> Idris ()
215−setLogLevel l = do i <- get
215+setLogLevel l = do i <- getIState
216216 let opts = idris_options i
217217 let opt' = opts { opt_logLevel = l }
218− put (i { idris_options = opt' } )
218+ putIState $ i { idris_options = opt' }
219219
220220setCmdLine :: [Opt] -> Idris ()
221−setCmdLine opts = do i <- get
221+setCmdLine opts = do i <- getIState
222222 let iopts = idris_options i
223− put (i { idris_options = iopts { opt_cmdline = opts } })
223+ putIState $ i { idris_options = iopts { opt_cmdline = opts } }
224224
225225getDumpDefun :: Idris (Maybe FilePath)
226−getDumpDefun = do i <- get
226+getDumpDefun = do i <- getIState
227227 return $ findC (opt_cmdline (idris_options i))
228228 where findC [] = Nothing
229229 findC (DumpDefun x : _) = Just x
230230 findC (_ : xs) = findC xs
231231
232232getDumpCases :: Idris (Maybe FilePath)
233−getDumpCases = do i <- get
233+getDumpCases = do i <- getIState
234234 return $ findC (opt_cmdline (idris_options i))
235235 where findC [] = Nothing
236236 findC (DumpCases x : _) = Just x
237237 findC (_ : xs) = findC xs
238238
239239logLevel :: Idris Int
240−logLevel = do i <- get
240+logLevel = do i <- getIState
241241 return (opt_logLevel (idris_options i))
242242
243243setErrContext :: Bool -> Idris ()
244−setErrContext t = do i <- get
244+setErrContext t = do i <- getIState
245245 let opts = idris_options i
246246 let opt' = opts { opt_errContext = t }
247− put (i { idris_options = opt' })
247+ putIState $ i { idris_options = opt' }
248248
249249errContext :: Idris Bool
250−errContext = do i <- get
250+errContext = do i <- getIState
251251 return (opt_errContext (idris_options i))
252252
253253useREPL :: Idris Bool
254−useREPL = do i <- get
254+useREPL = do i <- getIState
255255 return (opt_repl (idris_options i))
256256
257257setREPL :: Bool -> Idris ()
258−setREPL t = do i <- get
258+setREPL t = do i <- getIState
259259 let opts = idris_options i
260260 let opt' = opts { opt_repl = t }
261− put (i { idris_options = opt' })
261+ putIState $ i { idris_options = opt' }
262262
263263setTarget :: Target -> Idris ()
264−setTarget t = do i <- get
264+setTarget t = do i <- getIState
265265 let opts = idris_options i
266266 let opt' = opts { opt_target = t }
267− put (i { idris_options = opt' })
267+ putIState $ i { idris_options = opt' }
268268
269269target :: Idris Target
270−target = do i <- get
270+target = do i <- getIState
271271 return (opt_target (idris_options i))
272272
273273setOutputTy :: OutputType -> Idris ()
274−setOutputTy t = do i <- get
274+setOutputTy t = do i <- getIState
275275 let opts = idris_options i
276276 let opt' = opts { opt_outputTy = t }
277− put (i { idris_options = opt' })
277+ putIState $ i { idris_options = opt' }
278278
279279outputTy :: Idris OutputType
280−outputTy = do i <- get
280+outputTy = do i <- getIState
281281 return $ opt_outputTy $ idris_options i
282282
283283verbose :: Idris Bool
284−verbose = do i <- get
284+verbose = do i <- getIState
285285 return (opt_verbose (idris_options i))
286286
287287setVerbose :: Bool -> Idris ()
288−setVerbose t = do i <- get
288+setVerbose t = do i <- getIState
289289 let opts = idris_options i
290290 let opt' = opts { opt_verbose = t }
291− put (i { idris_options = opt' })
291+ putIState $ i { idris_options = opt' }
292292
293293typeInType :: Idris Bool
294−typeInType = do i <- get
294+typeInType = do i <- getIState
295295 return (opt_typeintype (idris_options i))
296296
297297setTypeInType :: Bool -> Idris ()
298−setTypeInType t = do i <- get
298+setTypeInType t = do i <- getIState
299299 let opts = idris_options i
300300 let opt' = opts { opt_typeintype = t }
301− put (i { idris_options = opt' })
301+ putIState $ i { idris_options = opt' }
302302
303303coverage :: Idris Bool
304−coverage = do i <- get
304+coverage = do i <- getIState
305305 return (opt_coverage (idris_options i))
306306
307307setCoverage :: Bool -> Idris ()
308−setCoverage t = do i <- get
308+setCoverage t = do i <- getIState
309309 let opts = idris_options i
310310 let opt' = opts { opt_coverage = t }
311− put (i { idris_options = opt' })
311+ putIState $ i { idris_options = opt' }
312312
313313setIBCSubDir :: FilePath -> Idris ()
314−setIBCSubDir fp = do i <- get
314+setIBCSubDir fp = do i <- getIState
315315 let opts = idris_options i
316316 let opt' = opts { opt_ibcsubdir = fp }
317− put (i { idris_options = opt' })
317+ putIState $ i { idris_options = opt' }
318318
319319valIBCSubDir :: IState -> Idris FilePath
320320valIBCSubDir i = return (opt_ibcsubdir (idris_options i))
321321
322322addImportDir :: FilePath -> Idris ()
323−addImportDir fp = do i <- get
323+addImportDir fp = do i <- getIState
324324 let opts = idris_options i
325325 let opt' = opts { opt_importdirs = fp : opt_importdirs opts }
326− put (i { idris_options = opt' })
326+ putIState $ i { idris_options = opt' }
327327
328328setImportDirs :: [FilePath] -> Idris ()
329−setImportDirs fps = do i <- get
329+setImportDirs fps = do i <- getIState
330330 let opts = idris_options i
331331 let opt' = opts { opt_importdirs = fps }
332− put (i { idris_options = opt' })
332+ putIState $ i { idris_options = opt' }
333333
334334allImportDirs :: IState -> Idris [FilePath]
335335allImportDirs i = do let optdirs = opt_importdirs (idris_options i)
336336 return ("." : optdirs)
337337
338338impShow :: Idris Bool
339−impShow = do i <- get
339+impShow = do i <- getIState
340340 return (opt_showimp (idris_options i))
341341
342342setImpShow :: Bool -> Idris ()
343−setImpShow t = do i <- get
343+setImpShow t = do i <- getIState
344344 let opts = idris_options i
345345 let opt' = opts { opt_showimp = t }
346− put (i { idris_options = opt' })
346+ putIState $ i { idris_options = opt' }
347347
348348logLvl :: Int -> String -> Idris ()
349−logLvl l str = do i <- get
349+logLvl l str = do i <- getIState
350350 let lvl = opt_logLevel (idris_options i)
351351 when (lvl >= l)
352352 $ do liftIO (putStrLn str)
353− put (i { idris_log = idris_log i ++ str ++ "\n" } )
353+ putIState $ i { idris_log = idris_log i ++ str ++ "\n" }
354354
355355cmdOptType :: Opt -> Idris Bool
356−cmdOptType x = do i <- get
356+cmdOptType x = do i <- getIState
357357 return $ x `elem` opt_cmdline (idris_options i)
358358
359359iLOG :: String -> Idris ()
360360iLOG = logLvl 1
361361
362362noErrors :: Idris Bool
363−noErrors = do i <- get
363+noErrors = do i <- getIState
364364 case errLine i of
365365 Nothing -> return True
366366 _ -> return False
367367
368368setTypeCase :: Bool -> Idris ()
369−setTypeCase t = do i <- get
369+setTypeCase t = do i <- getIState
370370 let opts = idris_options i
371371 let opt' = opts { opt_typecase = t }
372− put (i { idris_options = opt' })
372+ putIState $ i { idris_options = opt' }
373373
374374
375375-- For inferring types of things
@@ -634,8 +634,8 @@ addStatics n tm ptm =
634634 let statics' = nub $ map fst statics ++
635635 filter (\x -> not (elem x dnames)) stnames
636636 let stpos = staticList statics' tm
637− i <- get
638− put (i { idris_statics = addDef n stpos (idris_statics i) })
637+ i <- getIState
638+ putIState $ i { idris_statics = addDef n stpos (idris_statics i) }
639639 addIBC (IBCStatic n)
640640 where
641641 initStatics (Bind n (Pi ty) sc) (PPi p _ _ s)
@@ -659,14 +659,14 @@ implicit syn n ptm = implicit' syn [] n ptm
659659
660660implicit' :: SyntaxInfo -> [Name] -> Name -> PTerm -> Idris PTerm
661661implicit' syn ignore n ptm
662− = do i <- get
662+ = do i <- getIState
663663 let (tm', impdata) = implicitise syn ignore i ptm
664664-- let (tm'', spos) = findStatics i tm'
665− put (i { idris_implicits = addDef n impdata (idris_implicits i) })
665+ putIState $ i { idris_implicits = addDef n impdata (idris_implicits i) }
666666 addIBC (IBCImp n)
667667 logLvl 5 ("Implicit " ++ show n ++ " " ++ show impdata)
668668-- i <- get
669−-- put (i { idris_statics = addDef n spos (idris_statics i) })
669+-- putIState $ i { idris_statics = addDef n spos (idris_statics i) }
670670 return tm'
671671
672672implicitise :: SyntaxInfo -> [Name] -> IState -> PTerm -> (PTerm, [PArg])
src/Idris/AbsSyntaxTree.hs+1−1
@@ -136,7 +136,7 @@ idrisInit = IState initContext [] [] emptyContext emptyContext emptyContext
136136
137137-- The monad for the main REPL - reading and processing files and updating
138138-- global state (hence the IO inner monad).
139−type Idris = StateT IState (InputT IO)
139+type Idris = InputT (StateT IState IO)
140140
141141-- Commands in the REPL
142142
src/Idris/Coverage.hs+9−9
@@ -33,23 +33,23 @@ genMissing fn args sc
3333-- covering...)
3434
3535mkPatTm :: PTerm -> Idris Term
36−mkPatTm t = do i <- get
36+mkPatTm t = do i <- getIState
3737 let timp = addImpl' True [] [] i t
3838 evalStateT (toTT timp) 0
3939 where
40− toTT (PRef _ n) = do i <- lift $ get
40+ toTT (PRef _ n) = do i <- lift getIState
4141 case lookupDef Nothing n (tt_ctxt i) of
4242 [TyDecl nt _] -> return $ P nt n Erased
4343 _ -> return $ P Ref n Erased
4444 toTT (PApp _ t args) = do t' <- toTT t
4545 args' <- mapM (toTT . getTm) args
4646 return $ mkApp t' args'
47− toTT _ = do v <- get
47+ toTT _ = do v <- get
4848 put (v + 1)
4949 return (P Bound (MN v "imp") Erased)
5050
5151mkPTerm :: Name -> [TT Name] -> Idris PTerm
52−mkPTerm f args = do i <- get
52+mkPTerm f args = do i <- getIState
5353 let fapp = mkApp (P Bound f Erased) (map eraseName args)
5454 return $ delab i fapp
5555 where eraseName (App f a) = App (eraseName f) (eraseName a)
@@ -90,7 +90,7 @@ dropDefault (c : cs) = c : dropDefault cs
9090dropDefault [] = []
9191
9292expandTree :: SC -> Idris SC
93−expandTree (Case n alts) = do i <- get
93+expandTree (Case n alts) = do i <- getIState
9494 as <- expandAlts i (dropDefault alts)
9595 (getDefault alts)
9696 alts' <- mapM expandTreeA as
@@ -307,7 +307,7 @@ calcProd i fc n pats = do patsprod <- mapM prodRec pats
307307calcTotality :: [Name] -> FC -> Name -> [([Name], Term, Term)]
308308 -> Idris Totality
309309calcTotality path fc n pats
310− = do i <- get
310+ = do i <- getIState
311311 let opts = case lookupCtxt Nothing n (idris_flags i) of
312312 [fs] -> fs
313313 _ -> []
@@ -370,7 +370,7 @@ checkTotality path fc n
370370 totalityError t = tclift $ tfail (At fc (Msg (show n ++ " is " ++ show t)))
371371
372372 warnPartial n t
373− = do i <- get
373+ = do i <- getIState
374374 case lookupDef Nothing n (tt_ctxt i) of
375375 [x] -> do
376376 iputStrLn $ show fc ++ ":Warning - " ++ show n ++ " is " ++ show t
@@ -399,7 +399,7 @@ checkDeclTotality (fc, n)
399399
400400buildSCG :: (FC, Name) -> Idris ()
401401buildSCG (_, n) = do
402− ist <- get
402+ ist <- getIState
403403 case lookupCtxt Nothing n (idris_callgraph ist) of
404404 [cg] -> case lookupDef Nothing n (tt_ctxt ist) of
405405 [CaseOp _ _ _ _ _ args sc _ _] ->
@@ -495,7 +495,7 @@ buildSCG' ist sc args = -- trace ("Building SCG for " ++ show sc) $
495495
496496checkSizeChange :: Name -> Idris Totality
497497checkSizeChange n = do
498− ist <- get
498+ ist <- getIState
499499 case lookupCtxt Nothing n (idris_callgraph ist) of
500500 [cg] -> do let ms = mkMultiPaths ist [] (scg cg)
501501 logLvl 6 ("Multipath for " ++ show n ++ ":\n" ++
src/Idris/ElabDecls.hs+39−39
@@ -44,7 +44,7 @@ elabType info syn doc fc opts n ty' = {- let ty' = piBind (params info) ty_in
4444 n = liftname info n_in in -}
4545 do checkUndefined fc n
4646 ctxt <- getContext
47− i <- get
47+ i <- getIState
4848 logLvl 3 $ show n ++ " pre-type " ++ showImp True ty'
4949 ty' <- implicit syn n ty'
5050 let ty = addImpl i ty'
@@ -91,7 +91,7 @@ elabPostulate info syn doc fc opts n ty
9191 fty <- case lookupTy Nothing n ctxt of
9292 [] -> tclift $ tfail $ (At fc (NoTypeDecl n)) -- can't happen!
9393 [ty] -> return ty
94− ist <- get
94+ ist <- getIState
9595 let (ap, _) = unApply (getRetTy fty)
9696 logLvl 5 $ "Checking collapsibility of " ++ show (ap, fty)
9797 let postOK = case ap of
@@ -110,7 +110,7 @@ elabData info syn doc fc codata (PLaterdecl n t_in)
110110 = do iLOG (show (fc, doc))
111111 checkUndefined fc n
112112 ctxt <- getContext
113− i <- get
113+ i <- getIState
114114 t_in <- implicit syn n t_in
115115 let t = addImpl i t_in
116116 ((t', defer, is), log) <- tclift $ elaborate ctxt n (TType (UVal 0)) []
@@ -126,7 +126,7 @@ elabData info syn doc fc codata (PDatadecl n t_in dcons)
126126 = do iLOG (show fc)
127127 undef <- isUndefined fc n
128128 ctxt <- getContext
129− i <- get
129+ i <- getIState
130130 t_in <- implicit syn n t_in
131131 let t = addImpl i t_in
132132 ((t', defer, is), log) <- tclift $ elaborate ctxt n (TType (UVal 0)) []
@@ -140,11 +140,11 @@ elabData info syn doc fc codata (PDatadecl n t_in dcons)
140140 when undef $ updateContext (addTyDecl n cty)
141141 cons <- mapM (elabCon info syn n codata) dcons
142142 ttag <- getName
143− i <- get
143+ i <- getIState
144144 let as = map (const Nothing) (getArgTys cty)
145145 let params = findParams (zip as (repeat True)) (map snd cons)
146146 logLvl 2 $ "Parameters : " ++ show params
147− put (i { idris_datatypes = addDef n (TI (map fst cons) codata params)
147+ putIState (i { idris_datatypes = addDef n (TI (map fst cons) codata params)
148148 (idris_datatypes i) })
149149 addIBC (IBCDef n)
150150 addIBC (IBCData n)
@@ -188,7 +188,7 @@ elabRecord :: ElabInfo -> SyntaxInfo -> String -> FC -> Name ->
188188elabRecord info syn doc fc tyn ty cdoc cn cty
189189 = do elabData info syn doc fc False (PDatadecl tyn ty [(cdoc, cn, cty, fc)])
190190 cty' <- implicit syn cn cty
191− i <- get
191+ i <- getIState
192192 cty <- case lookupTy Nothing cn (tt_ctxt i) of
193193 [t] -> return (delab i t)
194194 _ -> fail "Something went inexplicably wrong"
@@ -213,13 +213,13 @@ elabRecord info syn doc fc tyn ty cdoc cn cty
213213 isNonImp _ = Nothing
214214
215215 tryElabDecl info (fn, ty, val)
216− = do i <- get
216+ = do i <- getIState
217217 idrisCatch (do elabDecl' EAll info ty
218218 elabDecl' EAll info val)
219219 (\v -> do iputStrLn $ show fc ++
220220 ":Warning - can't generate setter for " ++
221221 show fn ++ " (" ++ show ty ++ ")"
222− put i)
222+ putIState i)
223223
224224 getImplB k (PPi (Imp l s _) n Placeholder sc)
225225 = getImplB k sc
@@ -297,7 +297,7 @@ elabCon :: ElabInfo -> SyntaxInfo -> Name -> Bool ->
297297elabCon info syn tn codata (doc, n, t_in, fc)
298298 = do checkUndefined fc n
299299 ctxt <- getContext
300− i <- get
300+ i <- getIState
301301 t_in <- implicit syn n (if codata then mkLazy t_in else t_in)
302302 let t = addImpl i t_in
303303 logLvl 2 $ show fc ++ ":Constructor " ++ show n ++ " : " ++ showImp True t
@@ -343,7 +343,7 @@ elabClauses info fc opts n_in cs = let n = liftname info n_in in
343343 (zip [0..] cs)
344344 -- if the return type of 'ty' is collapsible, the optimised version should
345345 -- just do nothing
346− ist <- get
346+ ist <- getIState
347347 let (ap, _) = unApply (getRetTy fty)
348348 logLvl 5 $ "Checking collapsibility of " ++ show (ap, fty)
349349 -- FIXME: Really ought to only do this for total functions!
@@ -354,17 +354,17 @@ elabClauses info fc opts n_in cs = let n = liftname info n_in in
354354 _ -> False
355355 _ -> False
356356 solveDeferred n
357− ist <- get
357+ ist <- getIState
358358 when doNothing $
359359 case lookupCtxt Nothing n (idris_optimisation ist) of
360360 [oi] -> do let opts = addDef n (oi { collapsible = True })
361361 (idris_optimisation ist)
362− put (ist { idris_optimisation = opts })
362+ putIState (ist { idris_optimisation = opts })
363363 _ -> do let opts = addDef n (Optimise True [] [])
364364 (idris_optimisation ist)
365− put (ist { idris_optimisation = opts })
365+ putIState (ist { idris_optimisation = opts })
366366 addIBC (IBCOpt n)
367− ist <- get
367+ ist <- getIState
368368 let pats = pats_in
369369 -- logLvl 3 (showSep "\n" (map (\ (l,r) ->
370370 -- show l ++ " = " ++
@@ -401,7 +401,7 @@ elabClauses info fc opts n_in cs = let n = liftname info n_in in
401401 pdef' <- applyOpts optpdef
402402 logLvl 2 $ "Optimised patterns"
403403 logLvl 5 $ show pdef'
404− ist <- get
404+ ist <- getIState
405405 -- let wf = wellFounded ist n sc
406406 let tot = if pcover || AssertTotal `elem` opts
407407 then Unchecked -- finish checking later
@@ -425,8 +425,8 @@ elabClauses info fc opts n_in cs = let n = liftname info n_in in
425425 logLvl 3 (show tree)
426426 logLvl 3 $ "Optimised: " ++ show tree'
427427 ctxt <- getContext
428− ist <- get
429− put (ist { idris_patdefs = addDef n pdef' (idris_patdefs ist) })
428+ ist <- getIState
429+ putIState (ist { idris_patdefs = addDef n pdef' (idris_patdefs ist) })
430430 case lookupTy (namespace info) n ctxt of
431431 [ty] -> do updateContext (addCasedef n (inlinable opts)
432432 tcase knowncovering
@@ -437,7 +437,7 @@ elabClauses info fc opts n_in cs = let n = liftname info n_in in
437437 setTotality n tot
438438 totcheck (fc, n)
439439 when (tot /= Unchecked) $ addIBC (IBCTotal n tot)
440− i <- get
440+ i <- getIState
441441 case lookupDef Nothing n (tt_ctxt i) of
442442 (CaseOp _ _ _ _ _ scargs sc scargs' sc' : _) ->
443443 do let calls = findCalls sc' scargs'
@@ -485,7 +485,7 @@ elabClauses info fc opts n_in cs = let n = liftname info n_in in
485485elabVal :: ElabInfo -> Bool -> PTerm -> Idris (Term, Type)
486486elabVal info aspat tm_in
487487 = do ctxt <- getContext
488− i <- get
488+ i <- getIState
489489 let tm = addImpl i tm_in
490490 logLvl 10 (showImp True tm)
491491 -- try:
@@ -510,7 +510,7 @@ elabVal info aspat tm_in
510510checkPossible :: ElabInfo -> FC -> Bool -> Name -> PTerm -> Idris Bool
511511checkPossible info fc tcgen fname lhs_in
512512 = do ctxt <- getContext
513− i <- get
513+ i <- getIState
514514 let lhs = addImpl i lhs_in
515515 -- if the LHS type checks, it is possible
516516 case elaborate ctxt (MN 0 "patLHS") infP []
@@ -537,7 +537,7 @@ elabClause info tcgen (cnum, PClause fc fname lhs_in withs rhs_in whereblock)
537537 = do ctxt <- getContext
538538 -- Build the LHS as an "Infer", and pull out its type and
539539 -- pattern bindings
540− i <- get
540+ i <- getIState
541541 -- get the parameters first, to pass through to any where block
542542 let fn_ty = case lookupTy Nothing fname (tt_ctxt i) of
543543 [t] -> t
@@ -575,7 +575,7 @@ elabClause info tcgen (cnum, PClause fc fname lhs_in withs rhs_in whereblock)
575575 logLvl 5 $ "Where block:\n " ++ show wbefore ++ "\n" ++ show wafter
576576 mapM_ (elabDecl' EAll info) wbefore
577577 -- Now build the RHS, using the type of the LHS as the goal.
578− i <- get -- new implicits from where block
578+ i <- getIState -- new implicits from where block
579579 logLvl 5 (showImp True (expandParams decorate newargs defs (defs \\ decls) rhs_in))
580580 let rhs = addImplBoundInf i (map fst newargs) (defs \\ decls)
581581 (expandParams decorate newargs defs (defs \\ decls) rhs_in)
@@ -609,7 +609,7 @@ elabClause info tcgen (cnum, PClause fc fname lhs_in withs rhs_in whereblock)
609609 case converts ctxt [] clhsty crhsty of
610610 OK _ -> return ()
611611 Error e -> ierror (At fc (CantUnify False clhsty crhsty e [] 0))
612− i <- get
612+ i <- getIState
613613 checkInferred fc (delab' i crhs True) rhs
614614 return $ Right (clhs, crhs)
615615 where
@@ -678,7 +678,7 @@ elabClause info tcgen (_, PWith fc fname lhs_in withs wval_in withblock)
678678 = do ctxt <- getContext
679679 -- Build the LHS as an "Infer", and pull out its type and
680680 -- pattern bindings
681− i <- get
681+ i <- getIState
682682 let lhs = addImpl i lhs_in
683683 logLvl 5 ("LHS: " ++ showImp True lhs)
684684 ((lhs', dlhs, []), _) <-
@@ -731,7 +731,7 @@ elabClause info tcgen (_, PWith fc fname lhs_in withs wval_in withblock)
731731 logLvl 3 ("New function type " ++ show wtype)
732732 let wname = MN windex (show fname)
733733 let imps = getImps wtype -- add to implicits context
734− put (i { idris_implicits = addDef wname imps (idris_implicits i) })
734+ putIState (i { idris_implicits = addDef wname imps (idris_implicits i) })
735735 addIBC (IBCDef wname)
736736 def' <- checkDef fc [(wname, wtype)]
737737 addDeferred def'
@@ -751,7 +751,7 @@ elabClause info tcgen (_, PWith fc fname lhs_in withs wval_in withblock)
751751 (map (pexp . (PRef fc) . fst) bargs_post))
752752 logLvl 5 ("New RHS " ++ showImp True rhs)
753753 ctxt <- getContext -- New context with block added
754− i <- get
754+ i <- getIState
755755 ((rhs', defer, is), _) <-
756756 tclift $ elaborate ctxt (MN 0 "wpatRHS") clhsty []
757757 (do pbinds lhs_tm
@@ -776,7 +776,7 @@ elabClause info tcgen (_, PWith fc fname lhs_in withs wval_in withblock)
776776 mkAuxC wname lhs ns ns' d = return $ d
777777
778778 mkAux wname toplhs ns ns' (PClause fc n tm_in (w:ws) rhs wheres)
779− = do i <- get
779+ = do i <- getIState
780780 let tm = addImpl i tm_in
781781 logLvl 2 ("Matching " ++ showImp True tm ++ " against " ++
782782 showImp True toplhs)
@@ -787,7 +787,7 @@ elabClause info tcgen (_, PWith fc fname lhs_in withs wval_in withblock)
787787 lhs <- updateLHS n wname mvars ns ns' (fullApp tm) w
788788 return $ PClause fc wname lhs ws rhs wheres
789789 mkAux wname toplhs ns ns' (PWith fc n tm_in (w:ws) wval withs)
790− = do i <- get
790+ = do i <- getIState
791791 let tm = addImpl i tm_in
792792 logLvl 2 ("Matching " ++ showImp True tm ++ " against " ++
793793 showImp True toplhs)
@@ -864,7 +864,7 @@ elabClass info syn doc fc constraints tn ps ds
864864 mapM_ (elabDecl EAll info) (concat fns)
865865 -- add the default definitions
866866 mapM_ (elabDecl EAll info) (concat (map (snd.snd) defs))
867− i <- get
867+ i <- getIState
868868 addIBC (IBCClass tn)
869869 where
870870 nodoc (n, (_, o, t)) = (n, (o, t))
@@ -918,7 +918,7 @@ elabClass info syn doc fc constraints tn ps ds
918918 let ty = PPi constraint (MN 0 "pc") c con
919919 iLOG (showImp True ty)
920920 iLOG (showImp True lhs ++ " = " ++ showImp True rhs)
921− i <- get
921+ i <- getIState
922922 let conn = case con of
923923 PRef _ n -> n
924924 PApp _ (PRef _ n) _ -> n
@@ -982,7 +982,7 @@ elabInstance :: ElabInfo -> SyntaxInfo ->
982982 Maybe Name -> -- explicit name
983983 [PDecl] -> Idris ()
984984elabInstance info syn fc cs n ps t expn ds
985− = do i <- get
985+ = do i <- getIState
986986 (n, ci) <- case lookupCtxtName (namespace info) n (idris_classes i) of
987987 [c] -> return c
988988 _ -> fail $ show fc ++ ":" ++ show n ++ " is not a type class"
@@ -1139,7 +1139,7 @@ elabInstance info syn fc cs n ps t expn ds
11391139 let ty = PPi constraint (MN 0 "pc") c con
11401140 iLOG (showImp True ty)
11411141 iLOG (showImp True lhs ++ " = " ++ showImp True rhs)
1142− i <- get
1142+ i <- getIState
11431143 let conn = case con of
11441144 PRef _ n -> n
11451145 PApp _ (PRef _ n) _ -> n
@@ -1216,7 +1216,7 @@ elabDecl' what info (PData doc s f co d)
12161216elabDecl' what info d@(PClauses f o n ps)
12171217 | what /= ETypes
12181218 = do iLOG $ "Elaborating clause " ++ show n
1219− i <- get -- get the type options too
1219+ i <- getIState -- get the type options too
12201220 let o' = case lookupCtxt Nothing n (idris_flags i) of
12211221 [fs] -> fs
12221222 [] -> []
@@ -1225,7 +1225,7 @@ elabDecl' what info (PMutual f ps)
12251225 = do mapM_ (elabDecl ETypes info) ps
12261226 mapM_ (elabDecl EDefns info) ps
12271227elabDecl' what info (PParams f ns ps)
1228− = do i <- get
1228+ = do i <- getIState
12291229 iLOG $ "Expanding params block with " ++ show ns ++ " decls " ++
12301230 show (concatMap tldeclared ps)
12311231 let nblock = pblock i
@@ -1258,8 +1258,8 @@ elabDecl' what info (PRecord doc s f tyn ty cdoc cn cty)
12581258 = do iLOG $ "Elaborating record " ++ show tyn
12591259 elabRecord info s doc f tyn ty cdoc cn cty
12601260elabDecl' _ info (PDSL n dsl)
1261− = do i <- get
1262− put (i { idris_dsls = addDef n dsl (idris_dsls i) })
1261+ = do i <- getIState
1262+ putIState (i { idris_dsls = addDef n dsl (idris_dsls i) })
12631263 addIBC (IBCDSL n)
12641264elabDecl' what info (PDirective i)
12651265 | what /= EDefns = i
@@ -1281,7 +1281,7 @@ checkInferred fc inf user =
12811281 do logLvl 6 $ "Checked to\n" ++ showImp True inf ++ "\n\nFROM\n\n" ++
12821282 showImp True user
12831283 logLvl 10 $ "Checking match"
1284− i <- get
1284+ i <- getIState
12851285 tclift $ case matchClause' True i user inf of
12861286 Right vs -> return ()
12871287 Left (x, y) -> tfail $ At fc
@@ -1295,7 +1295,7 @@ checkInferred fc inf user =
12951295
12961296inferredDiff :: FC -> PTerm -> PTerm -> Idris Bool
12971297inferredDiff fc inf user =
1298− do i <- get
1298+ do i <- getIState
12991299 logLvl 6 $ "Checked to\n" ++ showImp True inf ++ "\n" ++
13001300 showImp True user
13011301 tclift $ case matchClause' True i user inf of
src/Idris/Error.hs+3−3
@@ -20,7 +20,7 @@ import Data.Typeable
2020iucheck :: Idris ()
2121iucheck = do tit <- typeInType
2222 when (not tit) $
23− do ist <- get
23+ do ist <- getIState
2424 idrisCatch (tclift $ ucheck (idris_constraints ist))
2525 (\e -> do let msg = show e
2626 setErrLine (getErrLine msg)
@@ -46,13 +46,13 @@ ifail :: String -> Idris ()
4646ifail str = throwIO (IErr str)
4747
4848ierror :: Err -> Idris ()
49−ierror err = do i <- get
49+ierror err = do i <- getIState
5050 throwIO (IErr $ pshow i err)
5151
5252tclift :: TC a -> Idris a
5353tclift tc = case tc of
5454 OK v -> return v
55− Error err -> do i <- get
55+ Error err -> do i <- getIState
5656 case err of
5757 At (FC f l) e -> setErrLine l
5858 _ -> return ()
src/Idris/Parser.hs+6−6
@@ -110,7 +110,7 @@ loadSource lidr f
110110 v <- verbose
111111 when v $ iputStrLn $ "Type checking " ++ f
112112 elabDecls toplevel ds
113− i <- get
113+ i <- getIState
114114 -- simplify every definition do give the totality checker
115115 -- a better chance
116116 mapM_ (\n -> do logLvl 5 $ "Simplifying " ++ show n
@@ -118,7 +118,7 @@ loadSource lidr f
118118 (map snd (idris_totcheck i))
119119 -- build size change graph from simplified definitions
120120 iLOG "Totality checking"
121− i <- get
121+ i <- getIState
122122 mapM_ buildSCG (idris_totcheck i)
123123 mapM_ checkDeclTotality (idris_totcheck i)
124124 iLOG ("Finished " ++ f)
@@ -162,7 +162,7 @@ parseTac i = runParser (do t <- pTactic defaultSyntax
162162
163163parseImports :: FilePath -> String -> Idris ([String], [String], String, SourcePos)
164164parseImports fname input
165− = do i <- get
165+ = do i <- getIState
166166 case runParser (do whiteSpace
167167 mname <- pHeader
168168 ps <- many pImport
@@ -170,7 +170,7 @@ parseImports fname input
170170 pos <- getPosition
171171 return ((mname, ps, rest, pos), i)) i fname input of
172172 Left err -> fail (show err)
173− Right (x, i) -> do put i
173+ Right (x, i) -> do putIState i
174174 return x
175175
176176pHeader :: IParser [String]
@@ -275,7 +275,7 @@ pImport = do reserved "import"; f <- identifier; option ';' (lchar ';')
275275parseProg :: SyntaxInfo -> FilePath -> String -> SourcePos ->
276276 Idris [PDecl]
277277parseProg syn fname input pos
278− = do i <- get
278+ = do i <- getIState
279279 case runParser (do setPosition pos
280280 whiteSpace
281281 ps <- many (pDecl syn)
@@ -284,7 +284,7 @@ parseProg syn fname input pos
284284 return (concat ps, i')) i fname input of
285285 Left err -> do iputStrLn (show err)
286286 return []
287− Right (x, i) -> do put i
287+ Right (x, i) -> do putIState i
288288 return (collect x)
289289
290290-- Collect PClauses with the same function name
src/Idris/Prover.hs+7−7
@@ -22,7 +22,7 @@ import Util.Pretty
2222prover :: Bool -> Name -> Idris ()
2323prover lit x =
2424 do ctxt <- getContext
25− i <- get
25+ i <- getIState
2626 case lookupTy Nothing x ctxt of
2727 [t] -> if elem x (idris_metavars i)
2828 then prove ctxt lit x t
@@ -39,13 +39,13 @@ showProof lit n ps
3939
4040prove :: Context -> Bool -> Name -> Type -> Idris ()
4141prove ctxt lit n ty
42− = do let ps = initElaborator n ctxt ty
42+ = do let ps = initElaborator n ctxt ty
4343 (tm, prf) <- ploop True ("-" ++ show n) [] (ES (ps, []) "" Nothing)
4444 iLOG $ "Adding " ++ show tm
4545 iputStrLn $ showProof lit n prf
46− i <- get
46+ i <- getIState
4747 let proofs = proof_list i
48− put (i { proof_list = (n, prf) : proofs })
48+ putIState (i { proof_list = (n, prf) : proofs })
4949 let tree = simpleCase False True CompileTime (FC "proof" 0) [([], P Ref n ty, tm)]
5050 logLvl 3 (show tree)
5151 (ptm, pty) <- recheckC (FC "proof" 0) [] tm
@@ -58,7 +58,7 @@ prove ctxt lit n ty
5858elabStep :: ElabState [PDecl] -> ElabD a -> Idris (a, ElabState [PDecl])
5959elabStep st e = do case runStateT e st of
6060 OK (a, st') -> return (a, st')
61− Error a -> do i <- get
61+ Error a -> do i <- getIState
6262 fail (pshow i a)
6363
6464dumpState :: IState -> ProofState -> IO ()
@@ -110,9 +110,9 @@ lifte st e = do (v, _) <- elabStep st e
110110
111111ploop :: Bool -> String -> [String] -> ElabState [PDecl] -> Idris (Term, [String])
112112ploop d prompt prf e
113− = do i <- get
113+ = do i <- getIState
114114 when d $ liftIO $ dumpState i (proof e)
115− x <- lift $ getInputLine (prompt ++ "> ")
115+ x <- getInputLine (prompt ++ "> ")
116116 (cmd, step) <- case x of
117117 Nothing -> fail "Abandoned"
118118 Just input -> do return (parseTac i input, input)
src/Idris/REPL.hs+48−40
@@ -53,7 +53,7 @@ repl :: IState -> [FilePath] -> Idris ()
5353repl orig mods
5454 = H.catch
5555 (do let prompt = mkPrompt mods
56− x <- lift $ getInputLine (prompt ++ "> ")
56+ x <- getInputLine (prompt ++ "> ")
5757 case x of
5858 Nothing -> do iputStrLn "Bye bye"
5959 return ()
@@ -78,7 +78,7 @@ lit f = case splitExtension f of
7878
7979processInput :: String -> IState -> [FilePath] -> Idris (Maybe [FilePath])
8080processInput cmd orig inputs
81− = do i <- get
81+ = do i <- getIState
8282 let fn = case inputs of
8383 (f:_) -> f
8484 _ -> ""
@@ -86,12 +86,12 @@ processInput cmd orig inputs
8686 Left err -> do liftIO $ print err
8787 return (Just inputs)
8888 Right Reload ->
89− do put (orig { idris_options = idris_options i })
89+ do putIState (orig { idris_options = idris_options i })
9090 clearErr
9191 mods <- mapM loadModule inputs
9292 return (Just inputs)
9393 Right (Load f) ->
94− do put (orig { idris_options = idris_options i })
94+ do putIState (orig { idris_options = idris_options i })
9595 clearErr
9696 mod <- loadModule f
9797 return (Just [f])
@@ -111,7 +111,7 @@ processInput cmd orig inputs
111111
112112resolveProof :: Name -> Idris Name
113113resolveProof n'
114− = do i <- get
114+ = do i <- getIState
115115 ctxt <- getContext
116116 n <- case lookupNames Nothing n' ctxt of
117117 [x] -> return x
@@ -121,15 +121,15 @@ resolveProof n'
121121
122122removeProof :: Name -> Idris ()
123123removeProof n =
124− do i <- get
124+ do i <- getIState
125125 let proofs = proof_list i
126126 let ps = filter ((/= n) . fst) proofs
127− put $ i { proof_list = ps }
127+ putIState $ i { proof_list = ps }
128128
129129edit :: FilePath -> IState -> Idris ()
130130edit "" orig = iputStrLn "Nothing to edit"
131131edit f orig
132− = do i <- get
132+ = do i <- getIState
133133 env <- liftIO $ getEnvironment
134134 let editor = getEditor env
135135 let line = case errLine i of
@@ -138,7 +138,7 @@ edit f orig
138138 let cmd = editor ++ line ++ f
139139 liftIO $ system cmd
140140 clearErr
141− put (orig { idris_options = idris_options i })
141+ putIState (orig { idris_options = idris_options i })
142142 loadModule f
143143 iucheck
144144 return ()
@@ -149,7 +149,7 @@ edit f orig
149149
150150proofs :: IState -> Idris ()
151151proofs orig
152− = do i <- get
152+ = do i <- getIState
153153 let ps = proof_list i
154154 case ps of
155155 [] -> iputStrLn "No proofs available"
@@ -166,7 +166,7 @@ process fn Help = iputStrLn displayHelp
166166process fn (Eval t)
167167 = do (tm, ty) <- elabVal toplevel False t
168168 ctxt <- getContext
169− ist <- get
169+ ist <- getIState
170170 let tm' = normaliseAll ctxt [] tm
171171 let ty' = normaliseAll ctxt [] ty
172172 logLvl 3 $ "Raw: " ++ show (tm', ty')
@@ -186,7 +186,7 @@ process fn (ExecVal t)
186186 where fc = FC "(input)" 0
187187process fn (Check (PRef _ n))
188188 = do ctxt <- getContext
189− ist <- get
189+ ist <- getIState
190190 imp <- impShow
191191 case lookupTy Nothing n ctxt of
192192 ts@(_:_) -> mapM_ (\t -> iputStrLn $ show n ++ " : " ++
@@ -194,20 +194,20 @@ process fn (Check (PRef _ n))
194194 [] -> iputStrLn $ "No such variable " ++ show n
195195process fn (Check t) = do (tm, ty) <- elabVal toplevel False t
196196 ctxt <- getContext
197− ist <- get
197+ ist <- getIState
198198 imp <- impShow
199199 let ty' = normaliseC ctxt [] ty
200200 iputStrLn (showImp imp (delab ist tm) ++ " : " ++
201201 showImp imp (delab ist ty))
202202
203−process fn (DocStr n) = do i <- get
203+process fn (DocStr n) = do i <- getIState
204204 case lookupCtxtName Nothing n (idris_docstrings i) of
205205 [] -> iputStrLn $ "No documentation for " ++ show n
206206 ns -> mapM_ showDoc ns
207207 where showDoc (n, d)
208208 = do doc <- getDocs n
209209 iputStrLn $ show doc
210−process fn Universes = do i <- get
210+process fn Universes = do i <- getIState
211211 let cs = idris_constraints i
212212-- iputStrLn $ showSep "\n" (map show cs)
213213 liftIO $ print (map fst cs)
@@ -216,7 +216,7 @@ process fn Universes = do i <- get
216216 case ucheck cs of
217217 Error e -> iputStrLn $ pshow i e
218218 OK _ -> iputStrLn "Universes OK"
219−process fn (Defn n) = do i <- get
219+process fn (Defn n) = do i <- getIState
220220 iputStrLn "Compiled patterns:\n"
221221 liftIO $ print (lookupDef Nothing n (tt_ctxt i))
222222 case lookupCtxt Nothing n (idris_patdefs i) of
@@ -230,12 +230,12 @@ process fn (Defn n) = do i <- get
230230 = do liftIO $ putStr $ showImp True (delab i lhs)
231231 liftIO $ putStr " = "
232232 liftIO $ putStrLn $ showImp True (delab i rhs)
233−process fn (TotCheck n) = do i <- get
233+process fn (TotCheck n) = do i <- getIState
234234 case lookupTotal n (tt_ctxt i) of
235235 [t] -> iputStrLn (showTotal t i)
236236 _ -> return ()
237237process fn (DebugInfo n)
238− = do i <- get
238+ = do i <- getIState
239239 let oi = lookupCtxtName Nothing n (idris_optimisation i)
240240 when (not (null oi)) $ iputStrLn (show oi)
241241 let si = lookupCtxt Nothing n (idris_statics i)
@@ -247,25 +247,25 @@ process fn (DebugInfo n)
247247 do print (head d)
248248 let cg = lookupCtxtName Nothing n (idris_callgraph i)
249249 findUnusedArgs (map fst cg)
250− i <- get
250+ i <- getIState
251251 let cg' = lookupCtxtName Nothing n (idris_callgraph i)
252252 sc <- checkSizeChange n
253253 iputStrLn $ "Size change: " ++ show sc
254254 when (not (null cg')) $ do iputStrLn "Call graph:\n"
255255 iputStrLn (show cg')
256−process fn (Info n) = do i <- get
256+process fn (Info n) = do i <- getIState
257257 case lookupCtxt Nothing n (idris_classes i) of
258258 [c] -> classInfo c
259259 _ -> iputStrLn "Not a class"
260260process fn (Search t) = iputStrLn "Not implemented"
261261process fn (Spec t) = do (tm, ty) <- elabVal toplevel False t
262262 ctxt <- getContext
263− ist <- get
263+ ist <- getIState
264264 let tm' = simplify ctxt True [] {- (idris_statics ist) -} tm
265265 iputStrLn (show (delab ist tm'))
266266
267267process fn (RmProof n')
268− = do i <- get
268+ = do i <- getIState
269269 n <- resolveProof n'
270270 let proofs = proof_list i
271271 case lookup n proofs of
@@ -276,15 +276,15 @@ process fn (RmProof n')
276276 where
277277 insertMetavar :: Name -> Idris ()
278278 insertMetavar n =
279− do i <- get
279+ do i <- getIState
280280 let ms = idris_metavars i
281− put $ i { idris_metavars = n : ms }
281+ putIState $ i { idris_metavars = n : ms }
282282
283283process fn (AddProof prf)
284284 = do let fb = fn ++ "~"
285285 liftIO $ copyFile fn fb -- make a backup in case something goes wrong!
286286 prog <- liftIO $ readFile fb
287− i <- get
287+ i <- getIState
288288 let proofs = proof_list i
289289 n' <- case prf of
290290 Nothing -> case proofs of
@@ -301,7 +301,7 @@ process fn (AddProof prf)
301301 where ls = (lines prog)
302302
303303process fn (ShowProof n')
304− = do i <- get
304+ = do i <- getIState
305305 n <- resolveProof n'
306306 let proofs = proof_list i
307307 case lookup n proofs of
@@ -310,26 +310,26 @@ process fn (ShowProof n')
310310
311311process fn (Prove n')
312312 = do ctxt <- getContext
313− ist <- get
313+ ist <- getIState
314314 n <- case lookupNames Nothing n' ctxt of
315315 [x] -> return x
316316 [] -> return n'
317317 ns -> fail $ pshow ist (CantResolveAlts (map show ns))
318318 prover (lit fn) n
319319 -- recheck totality
320− i <- get
320+ i <- getIState
321321 totcheck (FC "(input)" 0, n)
322322 mapM_ (\ (f,n) -> setTotality n Unchecked) (idris_totcheck i)
323323 mapM_ checkDeclTotality (idris_totcheck i)
324324
325325process fn (HNF t) = do (tm, ty) <- elabVal toplevel False t
326326 ctxt <- getContext
327− ist <- get
327+ ist <- getIState
328328 let tm' = hnf ctxt [] tm
329329 iputStrLn (show (delab ist tm'))
330−process fn TTShell = do ist <- get
330+process fn TTShell = do ist <- getIState
331331 let shst = initState (tt_ctxt ist)
332− shst' <- lift $ runShell shst
332+ runShell shst
333333 return ()
334334process fn Execute = do (m, _) <- elabVal toplevel False
335335 (PApp fc
@@ -361,7 +361,7 @@ process fn (Pattelab t)
361361 = do (tm, ty) <- elabVal toplevel True t
362362 iputStrLn $ show tm ++ "\n\n : " ++ show ty
363363
364−process fn (Missing n) = do i <- get
364+process fn (Missing n) = do i <- getIState
365365 case lookupDef Nothing n (tt_ctxt i) of
366366 [CaseOp _ _ _ _ _ args t _ _]
367367 -> do tms <- genMissing n args t
@@ -369,7 +369,7 @@ process fn (Missing n) = do i <- get
369369 [] -> iputStrLn $ show n ++ " undefined"
370370 _ -> iputStrLn $ "Ambiguous name"
371371process fn Metavars
372− = do ist <- get
372+ = do ist <- getIState
373373 let mvs = idris_metavars ist \\ primDefs
374374 case mvs of
375375 [] -> iputStrLn "No global metavariables to solve"
@@ -396,7 +396,7 @@ dumpMethod :: (Name, (FnOpts, PTerm)) -> Idris ()
396396dumpMethod (n, (_, t)) = iputStrLn $ show n ++ " : " ++ show t
397397
398398dumpInstance :: Name -> Idris ()
399−dumpInstance n = do i <- get
399+dumpInstance n = do i <- getIState
400400 ctxt <- getContext
401401 imp <- impShow
402402 case lookupTy Nothing n ctxt of
@@ -489,12 +489,20 @@ help =
489489 ([":q",":quit"], "", "Exit the Idris system")
490490 ]
491491
492+idrisCompletion :: CompletionFunc (StateT IState IO)
493+idrisCompletion (before, after) = return (before, [])
494+
495+haskelineSettings :: Settings (StateT IState IO)
496+haskelineSettings = setComplete idrisCompletion defaultSettings
497+
492498-- invoke as if from command line
493499idris :: [Opt] -> IO IState
494−idris opts = runInputT defaultSettings $ execStateT (idrisMain opts) idrisInit
500+idris opts = execStateT (runInputT haskelineSettings $ idrisMain opts) idrisInit
501+
502+--runInputT haskelineSettings $ execStateT (idrisMain opts) idrisInit
495503
496504idrisMain :: [Opt] -> Idris ()
497−idrisMain opts =
505+idrisMain opts =
498506 do let inputs = opt getFile opts
499507 let runrepl = not (NoREPL `elem` opts)
500508 let output = opt getOutput opts
@@ -510,8 +518,8 @@ idrisMain opts =
510518 let tgt = case opt getTarget opts of
511519 [] -> ViaC
512520 xs -> last xs
513− when (DefaultTotal `elem` opts) $ do i <- get
514− put (i { default_total = True })
521+ when (DefaultTotal `elem` opts) $ do i <- getIState
522+ putIState (i { default_total = True })
515523 setREPL runrepl
516524 setVerbose runrepl
517525 setCmdLine opts
@@ -536,8 +544,8 @@ idrisMain opts =
536544 elabPrims
537545 when (not (NoPrelude `elem` opts)) $ do x <- loadModule "Prelude"
538546 return ()
539− when runrepl $ iputStrLn banner
540− ist <- get
547+ when runrepl $ iputStrLn banner
548+ ist <- getIState
541549 mods <- mapM loadModule inputs
542550 ok <- noErrors
543551 when ok $ case output of
src/Idris/UnusedArgs.hs+2−2
@@ -14,7 +14,7 @@ findUnusedArgs ns = mapM_ traceUnused ns
1414
1515traceUnused :: Name -> Idris ()
1616traceUnused n
17− = do i <- get
17+ = do i <- getIState
1818 case lookupCtxt Nothing n (idris_callgraph i) of
1919 [CGInfo args calls scg usedns _] ->
2020 do let argpos = zip args [0..]
@@ -38,7 +38,7 @@ used path g j
3838 | (g, j) `elem` path = return False -- cycle, never used on the way
3939 | otherwise
4040 = do logLvl 5 $ (show ((g, j) : path))
41− i <- get
41+ i <- getIState
4242 case lookupCtxt Nothing g (idris_callgraph i) of
4343 [CGInfo args calls scg usedns unused] ->
4444 if (j >= length args)
src/Main.hs+1−1
@@ -39,7 +39,7 @@ import Paths_idris
3939
4040main = do xs <- getArgs
4141 let opts = parseArgs xs
42− runInputT defaultSettings $ execStateT (runIdris opts) idrisInit
42+ execStateT (runInputT haskelineSettings $ runIdris opts) idrisInit
4343
4444runIdris :: [Opt] -> Idris ()
4545runIdris opts = do