@@ -124,29 +124,29 @@ mkIBC (i:is) f = do ist <- getIState
124124
125125ibc :: IState -> IBCWrite -> IBCFile -> Idris IBCFile
126126ibc i (IBCFix d) f = return f { ibc_fixes = d : ibc_fixes f }
127−ibc i (IBCImp n) f = case lookupCtxt n (idris_implicits i) of
128− [v] -> return f { ibc_implicits = (n,v): ibc_implicits f }
127+ibc i (IBCImp n) f = case lookupCtxtExact n (idris_implicits i) of
128+ Just v -> return f { ibc_implicits = (n,v): ibc_implicits f }
129129 _ -> ifail "IBC write failed"
130130ibc i (IBCStatic n) f
131− = case lookupCtxt n (idris_statics i) of
132− [v] -> return f { ibc_statics = (n,v): ibc_statics f }
131+ = case lookupCtxtExact n (idris_statics i) of
132+ Just v -> return f { ibc_statics = (n,v): ibc_statics f }
133133 _ -> ifail "IBC write failed"
134134ibc i (IBCClass n) f
135− = case lookupCtxt n (idris_classes i) of
136− [v] -> return f { ibc_classes = (n,v): ibc_classes f }
135+ = case lookupCtxtExact n (idris_classes i) of
136+ Just v -> return f { ibc_classes = (n,v): ibc_classes f }
137137 _ -> ifail "IBC write failed"
138138ibc i (IBCInstance int n ins) f
139139 = return f { ibc_instances = (int,n,ins): ibc_instances f }
140140ibc i (IBCDSL n) f
141− = case lookupCtxt n (idris_dsls i) of
142− [v] -> return f { ibc_dsls = (n,v): ibc_dsls f }
141+ = case lookupCtxtExact n (idris_dsls i) of
142+ Just v -> return f { ibc_dsls = (n,v): ibc_dsls f }
143143 _ -> ifail "IBC write failed"
144144ibc i (IBCData n) f
145− = case lookupCtxt n (idris_datatypes i) of
146− [v] -> return f { ibc_datatypes = (n,v): ibc_datatypes f }
145+ = case lookupCtxtExact n (idris_datatypes i) of
146+ Just v -> return f { ibc_datatypes = (n,v): ibc_datatypes f }
147147 _ -> ifail "IBC write failed"
148−ibc i (IBCOpt n) f = case lookupCtxt n (idris_optimisation i) of
149− [v] -> return f { ibc_optimise = (n,v): ibc_optimise f }
148+ibc i (IBCOpt n) f = case lookupCtxtExact n (idris_optimisation i) of
149+ Just v -> return f { ibc_optimise = (n,v): ibc_optimise f }
150150 _ -> ifail "IBC write failed"
151151ibc i (IBCSyntax n) f = return f { ibc_syntax = n : ibc_syntax f }
152152ibc i (IBCKeyword n) f = return f { ibc_keywords = n : ibc_keywords f }
@@ -158,12 +158,12 @@ ibc i (IBCCGFlag tgt n) f = return f { ibc_cgflags = (tgt, n) : ibc_cgflags f }
158158ibc i (IBCDyLib n) f = return f {ibc_dynamic_libs = n : ibc_dynamic_libs f }
159159ibc i (IBCHeader tgt n) f = return f { ibc_hdrs = (tgt, n) : ibc_hdrs f }
160160ibc i (IBCDef n) f
161− = do f' <- case lookupDef n (tt_ctxt i) of
162− [v] -> do (v', (f', _)) <- runStateT (updateDef v) (f, length (symbols f))
163− return f' { ibc_defs = (n,v) : ibc_defs f' }
161+ = do f' <- case lookupDefExact n (tt_ctxt i) of
162+ Just v -> do (v', (f', _)) <- runStateT (updateDef v) (f, length (symbols f))
163+ return f' { ibc_defs = (n,v) : ibc_defs f' }
164164 _ -> ifail "IBC write failed"
165− case lookupCtxt n (idris_patdefs i) of
166− [v] -> return f' { ibc_patdefs = (n,v) : ibc_patdefs f' }
165+ case lookupCtxtExact n (idris_patdefs i) of
166+ Just v -> return f' { ibc_patdefs = (n,v) : ibc_patdefs f' }
167167 _ -> return f' -- Not a pattern definition
168168 where
169169 updateDef :: Def -> StateT (IBCFile, Int) Idris Def
@@ -220,11 +220,11 @@ ibc i (IBCDef n) f
220220 update t = return t
221221
222222
223−ibc i (IBCDoc n) f = case lookupCtxt n (idris_docstrings i) of
224− [v] -> return f { ibc_docstrings = (n,v) : ibc_docstrings f }
223+ibc i (IBCDoc n) f = case lookupCtxtExact n (idris_docstrings i) of
224+ Just v -> return f { ibc_docstrings = (n,v) : ibc_docstrings f }
225225 _ -> ifail "IBC write failed"
226−ibc i (IBCCG n) f = case lookupCtxt n (idris_callgraph i) of
227− [v] -> return f { ibc_cg = (n,v) : ibc_cg f }
226+ibc i (IBCCG n) f = case lookupCtxtExact n (idris_callgraph i) of
227+ Just v -> return f { ibc_cg = (n,v) : ibc_cg f }
228228 _ -> ifail "IBC write failed"
229229ibc i (IBCCoercion n) f = return f { ibc_coercions = n : ibc_coercions f }
230230ibc i (IBCAccess n a) f = return f { ibc_access = (n,a) : ibc_access f }
@@ -336,8 +336,8 @@ pImports fs
336336pImps :: [(Name, [PArg])] -> Idris ()
337337pImps imps = mapM_ (\ (n, imp) ->
338338 do i <- getIState
339− case lookupDefAcc n False (tt_ctxt i) of
340− [(n, Hidden)] -> return ()
339+ case lookupDefAccExact n False (tt_ctxt i) of
340+ Just (n, Hidden) -> return ()
341341 _ -> putIState (i { idris_implicits
342342 = addDef n imp (idris_implicits i) }))
343343 imps
@@ -358,8 +358,8 @@ pClasses cs = mapM_ (\ (n, c) ->
358358 do i <- getIState
359359 -- Don't lose instances from previous IBCs, which
360360 -- could have loaded in any order
361− let is = case lookupCtxt n (idris_classes i) of
362− [CI _ _ _ _ _ ins] -> ins
361+ let is = case lookupCtxtExact n (idris_classes i) of
362+ Just (CI _ _ _ _ _ ins) -> ins
363363 _ -> []
364364 let c' = c { class_instances =
365365 class_instances c ++ is }
@@ -433,9 +433,10 @@ pDefs syms ds
433433 do let d' = updateDef d
434434 case d' of
435435 TyDecl _ _ -> return ()
436− _ -> solveDeferred n
436+ _ -> do iLOG $ "SOLVING " ++ show n
437+ solveDeferred n
437438 i <- getIState
438− logLvl 5 $ "Added " ++ show (n, d')
439+-- logLvl 1 $ "Added " ++ show (n, d')
439440 putIState (i { tt_ctxt = addCtxtDef n d' (tt_ctxt i) })) ds
440441 where
441442 updateDef (CaseOp c t args o s cd)