I have a Rule class in groovy and i can overload <<, and, or for class instance but if i want to write 

```
Rule a = new Rule()
a<< {false }  //overloaded evaluate internal closure 

println !a // expect to get true - but you always get false

```

i cant find what the groovy logical 'not' operator is. If i call '!a' i always get false as i think that compiler is using groovy truth of 'a' is 'true' so '!a' would be false.

but i want the '!a' to mean '!(a.evaluate())' for this class 

how do i do that ?

PS - extended - here is dummy mocked up view of my Rule class - all trimmings removed - this is runnable in a script 

```
class Rule {
    Closure  evaluate
    def leftShift (closure ) {
        this.evaluate = closure
    }

}

def r = new Rule ()
r << {false}

println "logical not of rule : " + !r
println " rule evaluate  : " + !r.evaluate ()

r << {true}
println "logical not of rule : " + !r
println " rule evaluate  : " + !r.evaluate ()

```