abstract types and modules 5122785