Fortran Wiki
Polymorphism for procedure pointers inside derived types