@@ -499,8 +499,10 @@ elab ist info emode opts fn tm
499499 trySeq [] = fail "Nothing to try in sequence"
500500 trySeq' deferr [] = proofFail deferr
501501 trySeq' deferr (x : xs)
502− = try' (do elab' ina fc x
503− solveAutos ist fn False) (trySeq' deferr xs) True
502+ = try' (tryCatch (do elab' ina fc x
503+ solveAutos ist fn False)
504+ (\_ -> deferr))
505+ (trySeq' deferr xs) True
504506 elab' ina fc (PAlternative ms TryImplicit (orig : alts)) = do
505507 env <- get_env
506508 compute
@@ -1377,15 +1379,22 @@ elab ist info emode opts fn tm
13771379 fullyElaborated (Proj t _) = fullyElaborated t
13781380 fullyElaborated _ = return ()
13791381
1382+ -- If the goal type is a "Lazy", then try elaborating via 'Delay'
1383+ -- first. We need to do this brute force approach, rather than anything
1384+ -- more precise, since there may be various other ambiguities to resolve
1385+ -- first.
13801386 insertLazy :: PTerm -> ElabD PTerm
13811387 insertLazy t@(PApp _ (PRef _ _ (UN l)) _) | l == txt "Delay" = return t
13821388 insertLazy t@(PApp _ (PRef _ _ (UN l)) _) | l == txt "Force" = return t
13831389 insertLazy (PCoerced t) = return t
1390+ -- Don't add a delay to pattern variables, since they can be forced
1391+ -- on the rhs
1392+ insertLazy t@(PPatvar _ _) | pattern = return t
13841393 insertLazy t =
13851394 do ty <- goal
13861395 env <- get_env
13871396 let (tyh, _) = unApply (normalise (tt_ctxt ist) env ty)
1388− let tries = if pattern then [t, mkDelay env t] else [mkDelay env t, t]
1397+ let tries = [mkDelay env t, t]
13891398 case tyh of
13901399 P _ (UN l) _ | l == txt "Lazy'"
13911400 -> return (PAlternative [] FirstSuccess tries)