@@ -239,7 +239,8 @@ elab ist info pattern tcgen fn tm
239239 ctxt <- get_context
240240 -- make a function type a -> b -> c -> ... -> rty for the
241241 -- new function name
242− argTys <- claimArgTys args
242+ env <- get_env
243+ argTys <- claimArgTys env args
243244 fn <- unique_hole (MN 0 "inf_fn")
244245 let fty = fnTy argTys rty
245246-- trace (show (ptm, map fst argTys)) $ focus fn
@@ -248,20 +249,27 @@ elab ist info pattern tcgen fn tm
248249 -- elaborate the arguments, to unify their types. They all have to
249250 -- be explicit.
250251 mapM_ elabIArg (zip argTys args)
251− where claimArgTys [] = return []
252− claimArgTys (arg : xs) | PRef _ n <- getTm arg
252+ where claimArgTys env [] = return []
253+ claimArgTys env (arg : xs) | Just n <- localVar env (getTm arg)
253254 = do nty <- get_type (Var n)
254− ans <- claimArgTys xs
255+ ans <- claimArgTys env xs
255256 return ((n, (False, forget nty)) : ans)
256− claimArgTys (_ : xs) = do an <- unique_hole (MN 0 "inf_argTy")
257+ claimArgTys env (_ : xs)
258+ = do an <- unique_hole (MN 0 "inf_argTy")
257259 aval <- unique_hole (MN 0 "inf_arg")
258260 claim an RSet
259261 claim aval (Var an)
260− ans <- claimArgTys xs
262+ ans <- claimArgTys env xs
261263 return ((aval, (True, (Var an))) : ans)
262264 fnTy [] ret = forget ret
263265 fnTy ((x, (_, xt)) : xs) ret = RBind x (Pi xt) (fnTy xs ret)
264266
267+ localVar env (PRef _ x)
268+ = case lookup x env of
269+ Just _ -> Just x
270+ _ -> Nothing
271+ localVar env _ = Nothing
272+
265273 elabIArg ((n, (True, ty)), def) = do focus n; elabE ina (getTm def)
266274 elabIArg _ = return () -- already done, just a name
267275