avoid allocate unnecessary new objects
explicit return type annotations
Merge pull request #462 from xuwei-k/explicit-return-type

explicit return type annotations
add DisjunctionTest
fix issue where x would be evaluated twice.

same issue #352