@@ -1,4 +1,5 @@
11{-# LANGUAGE PatternGuards #-}
2+{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
23module Idris.Delaborate (bugaddr, delab, delab', delabMV, delabTy, delabTy', fancifyAnnots, pprintDelab, pprintDelabTy, pprintErr) where
34
45-- Convert core TT back into high level syntax, primarily for display
@@ -32,6 +33,7 @@ delabTy i n
3233 (ty:_) -> case lookupCtxt n (idris_implicits i) of
3334 (imps:_) -> delabTy' i imps ty False False
3435 _ -> delabTy' i [] ty False False
36+ [] -> error "delabTy: got non-existing name"
3537
3638delab' :: IState -> Term -> Bool -> Bool -> PTerm
3739delab' i t f mvs = delabTy' i [] t f mvs
@@ -86,6 +88,7 @@ delabTy' ist imps tm fullname mvs = de [] imps tm
8688 de env _ (Bind n (Guess ty val) sc) = de ((n, sUN "[__]"):env) [] sc
8789 de env plic (Bind n bb sc) = de ((n,n):env) [] sc
8890 de env _ (Constant i) = PConstant i
91+ de env _ (Proj _ _) = error "Delaboration got run-time-only Proj!"
8992 de env _ Erased = Placeholder
9093 de env _ Impossible = Placeholder
9194 de env _ (TType i) = PType
@@ -183,6 +186,7 @@ pprintDelabTy i n
183186 case lookupCtxt n (idris_implicits i) of
184187 (imps:_) -> delabTy' i imps ty False False
185188 _ -> delabTy' i [] ty False False
189+ [] -> error "pprintDelabTy got a name that doesn't exist"
186190
187191pprintTerm :: IState -> PTerm -> Doc OutputAnnotation
188192pprintTerm ist = pprintTerm' ist []
@@ -335,10 +339,14 @@ pprintErr' i (ReflectionFailed msg err) =
335339 text "When attempting to perform error reflection, the following internal error occurred:" <>
336340 indented (pprintErr' i err) <>
337341 text ("This is probably a bug. Please consider reporting it at " ++ bugaddr)
342+pprintErr' i (ElabDebug mstr tm holes) =
343+ text "Elaboration halted." <>
344+ maybe empty (indented . text) mstr <>
345+ text "Term: TODO PRINT TERM" <>
346+ text "Holes: TODO PRINT AND PRESERVE"
338347
339−-- Make sure the machine invented names are shown helpfully to the user, so
348+-- | Make sure the machine invented names are shown helpfully to the user, so
340349-- that any names which differ internally also differ visibly
341−
342350renameMNs :: Term -> Term -> (Term, Term, [Name])
343351renameMNs x y = let ns = nub $ allTTNames x ++ allTTNames y
344352 newnames = evalState (getRenames [] ns) 1 in