@@ -318,15 +318,23 @@ elab ist info pattern tcgen fn tm
318318 _ -> n
319319 elab' ina x = fail $ "Something's gone wrong. Did you miss a semi-colon somewhere?"
320320
321− caseBlock :: FC -> Name -> [(Name, Binder Term)] -> [(PTerm, PTerm)] -> [PClause]
321+ caseBlock :: FC -> Name -> [(Name, Binder Term)] ->
322+ [(PTerm, PTerm)] -> [PClause]
322323 caseBlock fc n env opts
323324 = let args = map mkarg (map fst (init env)) in
324325 map (mkClause args) opts
325326 where -- mkarg (MN _ _) = Placeholder
326327 mkarg n = PRef fc n
328+ -- may be shadowed names in the new pattern - so replace the
329+ -- old ones with an _
327330 mkClause args (l, r)
328− = PClause fc n (PApp fc (PRef fc n)
329− (map pexp args ++ [pexp l])) [] r []
331+ = let args' = map (shadowed (allNamesIn l)) args
332+ lhs = PApp fc (PRef fc n)
333+ (map pexp args' ++ [pexp l]) in
334+ PClause fc n lhs [] r []
335+
336+ shadowed new (PRef _ n) | n `elem` new = Placeholder
337+ shadowed new t = t
330338
331339 elabArgs ina failed retry [] _
332340-- | retry = let (ns, ts) = unzip (reverse failed) in