Result - it is now almost applicative (added traverse); and also, a bunch of unittests added.
Also, added collect() and filter()