Rewritten.

*) remove injection.
*) made List, Iterable play with higher kinds.
Merge remote-tracking branch 'origin/master'