fogfish / datum Erlang 127 9 pure functional and generic programming for Erlang foldable traversable erlang lenses