on master help sign in
Fix shadowing bug with dependent pair bindings
5ce8ee7Edwin Brady
src/Idris/AbsSyntax.hs+5
@@ -623,6 +623,11 @@ expandParams dec ps ns infs tm = en tm
623 = let n' = mkShadow n in
623 = let n' = mkShadow n in
624 PLet n' (en ty) (en v) (en (shadow n n' s))
624 PLet n' (en ty) (en v) (en (shadow n n' s))
625 | otherwise = PLet n (en ty) (en v) (en s)
625 | otherwise = PLet n (en ty) (en v) (en s)
626+ -- FIXME: Should only do this in a type signature!
627+ en (PDPair f (PRef f' n) t r)
628+ | n `elem` (map fst ps ++ ns) && t /= Placeholder
629+ = let n' = mkShadow n in
630+ PDPair f (PRef f' n') (en t) (en (shadow n n' r))
626 en (PEq f l r) = PEq f (en l) (en r)
631 en (PEq f l r) = PEq f (en l) (en r)
627 en (PRewrite f l r g) = PRewrite f (en l) (en r) (fmap en g)
632 en (PRewrite f l r g) = PRewrite f (en l) (en r) (fmap en g)
628 en (PTyped l r) = PTyped (en l) (en r)
633 en (PTyped l r) = PTyped (en l) (en r)
test/reg009/reg009.lidr−1
@@ -2,7 +2,6 @@
2> isAnyBy _ (_ ** Nil) = False
2> isAnyBy _ (_ ** Nil) = False
3> isAnyBy p (_ ** (a :: as)) = p a || isAnyBy p (_ ** as)
3> isAnyBy p (_ ** (a :: as)) = p a || isAnyBy p (_ ** as)
4
4
5−
6> filterTagP : (p : alpha -> Bool) ->
5> filterTagP : (p : alpha -> Bool) ->
7> (as : Vect n alpha) ->
6> (as : Vect n alpha) ->
8> so (isAnyBy p (n ** as)) ->
7> so (isAnyBy p (n ** as)) ->