1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
module template_01_m
implicit none
private
public :: op_t
requirement semigroup(t, combine)
type, deferred :: t
elemental function combine(x, y) result(combined)
type(t), intent(in) :: x, y
type(t) :: combined
end function
end requirement
requirement extended_semigroup(t, combine, sconcat, stimes)
require :: semigroup(t, scombine)
pure function sconcat(list) result(combined)
type(t), intent(in) :: list(:)
type(t) :: combined
end function
elemental function stimes(n, a) result(repeated)
integer, intent(in) :: n
type(t), intent(in) :: a
type(t) :: repeated
end function
end requirement
contains
subroutine test_template()
end subroutine
end module
program template_01
use template_01_m
implicit none
end program template_01
|