Ondřej, You've got a long section section on callbacks and the associated 'type casting'. It's useful to see, in order to contrast and compare, the different ways it _could_ be done, but you've left out what is arguably the 'best' way to do this in modern Fortran. To adapt your example of an integration method, this would look something like this. module integrals use types, only: dp implicit none private public :: integrand, simpson ! User extends this type type, abstract :: integrand contains procedure(func), deferred :: eval end type abstract interface function func(this, x) result(fx) import :: integrand, dp class(integrand) :: this real(dp), intent(in) :: x real(dp) :: fx end function end interface contains real(dp) function simpson(f, a, b) result(s) class(integrand) :: f real(dp), intent(in) :: a, b s = ((b-a)/6) * (f%eval(a) + 4*f%eval((a+b)/2) + f%eval(b)) end function end module The abstract type prescribes exactly what the integration routine needs, namely a method to evaluate the function, but imposes nothing else on the user. The user extends this type, providing a concrete implementation of the eval type bound procedure and adding necessary context data as components of the extended type. Here's your usage example adapted to this better method: module example_usage use types, only: dp use integrals, only: integrand, simpson implicit none private public :: foo type, extends(integrand) :: my_integrand real(dp) :: a, k contains procedure :: eval => f end type contains function f(this, x) result(fx) class(my_integrand) :: this real(dp), intent(in) :: x real(dp) :: fx fx = this%a*sin(this%k*x) end function subroutine foo(a, k) real(dp) :: a, k type(my_integrand) :: my_f my_f%a = a my_f%k = k print *, simpson(my_f, 0.0_dp, 1.0_dp) print *, simpson(my_f, 0.0_dp, 2.0_dp) end subroutine end module A second general comment about the website. It would appear to present itself as a consensus view of the Fortran community (especially given the domain name.) Until that time it actually does, I'd suggest making it clear that you are the author and that the content really reflects your views on the topic. Nevertheless, I think that websites like this would be immensely useful to the community, and I applaud you for your effort. Best regards, Neil On Mon, 2012-06-04 at 23:08 -0700, Ondřej Čertík wrote: > Hi, > > I wanted to publicly announce a modern Fortran webpage that I have > been working on for some time: > > http://fortran90.org/