use generative functor for symbol table module