Functional Programming: of modules, signatures, structures and functors