A module function can act as a constructor helper when initialization needs a rule before the value is returned.

Program

Play the program to choose the raw port and build a validated server value.

constructor_helper.f90
module server_model
    implicit none
    type :: server
        character(len=12) :: host
        integer :: port
    end type server
contains
    function make_server(raw_port) result(item)
        integer, intent(in) :: raw_port
        type(server) :: item
        item%host = 'local'
        item%port = max(raw_port, 1)
    end function make_server
end module server_model

program constructor_helper_demo
    use server_model
    implicit none
    integer :: raw_port
    type(server) :: app

    raw_port = 
    app = make_server(raw_port)
    print '(A, A, I0)', trim(app%host), ':', app%port
end program constructor_helper_demo
module server_model
    implicit none
    type :: server
        character(len=12) :: host
        integer :: port
    end type server
contains
    function make_server(raw_port) result(item)
        integer, intent(in) :: raw_port
        type(server) :: item
        item%host = 'local'
        item%port = max(raw_port, 1)
    end function make_server
end module server_model

program constructor_helper_demo
    use server_model
    implicit none
    integer :: raw_port
    type(server) :: app

    raw_port = 
    app = make_server(raw_port)
    print '(A, A, I0)', trim(app%host), ':', app%port
end program constructor_helper_demo
module server_model
    implicit none
    type :: server
        character(len=12) :: host
        integer :: port
    end type server
contains
    function make_server(raw_port) result(item)
        integer, intent(in) :: raw_port
        type(server) :: item
        item%host = 'local'
        item%port = max(raw_port, 1)
    end function make_server
end module server_model

program constructor_helper_demo
    use server_model
    implicit none
    integer :: raw_port
    type(server) :: app

    raw_port = 
    app = make_server(raw_port)
    print '(A, A, I0)', trim(app%host), ':', app%port
end program constructor_helper_demo
constructor helper `make_server` returns a fully initialized derived-type value.
component assignment `item%host` and `item%port` assign fields before returning.
validation rule `max(raw_port, 1)` keeps the port positive.