add element setter
totally refactor Functional#function families