separation on modules and add values representation with polymorphic type