fix empty rule bug
lazy arg
move empty test to correct place