getBoundVars :: forall f a v i . (HasVars f v, HTraversable f) => f a i -> f (a :*: K (Set v)) i
getBoundVars t = let n :: f (Numbered a) i
                     n = number t
                     m = bindsVars n
                     trans :: Numbered a :-> (a :*: K (Set v))
                     trans (Numbered i x) = x :*: K (lookupNumMap Set.empty i m)
                 in hfmap trans n
getBoundVars :: forall f a v i . (HasVars f v, HTraversable f) => f a i -> f (a :*: K (Set v)) i
getBoundVars t = let n :: f (Numbered a) i
                     n = number t
                     m = bindsVars n
                     trans :: Numbered a :-> (a :*: K (Set v))
                     trans (Numbered i x) = x :*: K (lookupNumMap Set.empty i m)
                 in hfmap trans n
getBoundVars t = let n :: f (Numbered a) i
                     n = number t
                     m = bindsVars n
                     trans :: Numbered a :-> (a :*: K (Set v))
                     trans (Numbered i x) = x :*: K (lookupNumMap Set.empty i m)
                 in hfmap trans n