MODULE Demo IMPLICIT NONE TYPE My_complex INTEGER :: real, imaginary END TYPE My_complex CONTAINS PURE FUNCTION add (X, Y) IMPLICIT NONE TYPE(My_complex) :: add TYPE(My_complex), INTENT(IN) :: X, Y add%real = X%real+Y%real add%imaginary = X%imaginary+Y%imaginary END FUNCTION add END MODULE Demo