changed function signatures to utilize currying where appropriate
codetree fork's maintain their own set of chars to spare us a traversal
encoding and decoding implemented