on master help sign in
Merge pull request #176 from david-christiansen/completion

Reorder the monad transformers in the Idris monad to allow completion

commit053708a0ef6096c162fcf9ae9a4175b57f765a13 authorEdwin Brady <edwin.brady@gmail.com> dateTue 12 Feb 2013, 07:27 (14 years ago) parent4ae0450e49ab72
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"
@@ -1137,7 +1137,7 @@ elabInstance info syn fc cs n ps t expn ds
11371137 let ty = PPi constraint (MN 0 "pc") c con
11381138 iLOG (showImp True ty)
11391139 iLOG (showImp True lhs ++ " = " ++ showImp True rhs)
1140− i <- get
1140+ i <- getIState
11411141 let conn = case con of
11421142 PRef _ n -> n
11431143 PApp _ (PRef _ n) _ -> n
@@ -1214,7 +1214,7 @@ elabDecl' what info (PData doc s f co d)
12141214elabDecl' what info d@(PClauses f o n ps)
12151215 | what /= ETypes
12161216 = do iLOG $ "Elaborating clause " ++ show n
1217− i <- get -- get the type options too
1217+ i <- getIState -- get the type options too
12181218 let o' = case lookupCtxt Nothing n (idris_flags i) of
12191219 [fs] -> fs
12201220 [] -> []
@@ -1223,7 +1223,7 @@ elabDecl' what info (PMutual f ps)
12231223 = do mapM_ (elabDecl ETypes info) ps
12241224 mapM_ (elabDecl EDefns info) ps
12251225elabDecl' what info (PParams f ns ps)
1226− = do i <- get
1226+ = do i <- getIState
12271227 iLOG $ "Expanding params block with " ++ show ns ++ " decls " ++
12281228 show (concatMap tldeclared ps)
12291229 let nblock = pblock i
@@ -1256,8 +1256,8 @@ elabDecl' what info (PRecord doc s f tyn ty cdoc cn cty)
12561256 = do iLOG $ "Elaborating record " ++ show tyn
12571257 elabRecord info s doc f tyn ty cdoc cn cty
12581258elabDecl' _ info (PDSL n dsl)
1259− = do i <- get
1260− put (i { idris_dsls = addDef n dsl (idris_dsls i) })
1259+ = do i <- getIState
1260+ putIState (i { idris_dsls = addDef n dsl (idris_dsls i) })
12611261 addIBC (IBCDSL n)
12621262elabDecl' what info (PDirective i)
12631263 | what /= EDefns = i
@@ -1279,7 +1279,7 @@ checkInferred fc inf user =
12791279 do logLvl 6 $ "Checked to\n" ++ showImp True inf ++ "\n\nFROM\n\n" ++
12801280 showImp True user
12811281 logLvl 10 $ "Checking match"
1282− i <- get
1282+ i <- getIState
12831283 tclift $ case matchClause' True i user inf of
12841284 Right vs -> return ()
12851285 Left (x, y) -> tfail $ At fc
@@ -1293,7 +1293,7 @@ checkInferred fc inf user =
12931293
12941294inferredDiff :: FC -> PTerm -> PTerm -> Idris Bool
12951295inferredDiff fc inf user =
1296− do i <- get
1296+ do i <- getIState
12971297 logLvl 6 $ "Checked to\n" ++ showImp True inf ++ "\n" ++
12981298 showImp True user
12991299 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