everything is object and partially applied functions + tests
Merge remote-tracking branch 'origin/master'