subs v@(VarExpr x) old new
    | old == x = return new -- replace because they really match
    | otherwise = return v
subs v@(VarExpr x) old new
    | old == x = return new -- replace because they really match
    | otherwise = return v
subs v@(VarExpr x) old new
    | old == x = return new -- replace because they really match
    | otherwise = return v