構造体、構造化型、または派生型(DT)は、最初にFortran 90で導入されました。[http://www.lahey.com/lookat90.htm A Look at Fortran 90] - Lahey computer systems 構造体は、複数の異なる変数を保持する''データ型''を作成できるようにします。
派生型は、一般にモジュール内で実装され、簡単に再利用できるようになっています。また、構造体を処理するための''型に関連付けられた手続き''を保持することができます。引数pass(name), nopassは、オブジェクトを最初の引数として渡すかどうかを示します。
文字列のデータ型characterと同様に、構造体は2つの異なるパラメータ型でパラメータ化できます：kind, len。 kindパラメータはコンパイル時に既知でなければならず（定数で構成されています）、lenパラメータは実行時に変更できます。
例として、新しい構造体タイプ 'Fruit' を定義し、いくつかの基本的な果物変数を保持します：
type fruit
    real      :: diameter  ! in mm
    real      :: length    ! in mm
    character :: colour
end type
2つの 'fruit' 変数を宣言し、値を割り当てることができます：
type (fruit) :: apple, banana
apple = fruit(50, 45, "red")
banana%diameter = 40
banana%length   = 200
banana%colour   = "yellow"
その後、通常のFortran操作で果物変数とその子の値を使用できます。
!> type-bound procedures (pass/nopass arguments)の使用方法を示す
module test_m
    implicit none
    private
    public test_type
    type test_type
        integer :: i
    contains
        procedure, nopass :: print_hello
        procedure         :: print_int
    end type
contains
    !> タイプ固有データを処理しない => nopass
    subroutine print_hello
        print *, "hello"
    end subroutine
    !> タイプ固有データを処理する => 最初の引数は型 "class(test_type)" の "this"
    !! classを使用し、typeではなく !!!!
    subroutine print_int(this)
        class(test_type), intent(in) :: this
        print *, "i", this%i
  end subroutine
end module
program main
    use test_m
    implicit none
    type (test_type) :: obj
    obj%i = 1
    call obj%print_hello
    call obj%print_int
end program
! パラメータを持つ型のテスト: kind + len
program main
    implicit none
    type matrix(rows, cols, k)
        integer, len  :: rows, cols
        integer, kind :: k = kind(0.0)    ! optional/default value
        real (kind=k), dimension(rows, cols) :: vals
    end type 
    type (matrix(rows=3, cols=3)) :: my_obj
end program