class_docstr: Function type.
  
  A function type consists of a list of type parameters to enable
  the definition of generic functions,
  a set of type constraints which we omit for the time being,
  a sequence of argument types, and a return type.
  
  We can informally write them as:
  `forall (type_params), (arg_types) -> ret_type where type_constraints`
  
  Parameters
  ----------
  arg_types : List[tvm.relay.Type]
      The argument types
  
  ret_type : tvm.relay.Type
      The return type.
  
  type_params : Optional[List[tvm.relay.TypeVar]]
      The type parameters
  
  type_constraints : Optional[List[tvm.relay.TypeConstraint]]
      The type constraints.
code: def __init__(
      self, arg_types, ret_type, type_params=None, type_constraints=None
  ):
      if type_params is None:
          type_params = []
      if type_constraints is None:
          type_constraints = []
      self.__init_handle_by_constructor__(
          _ffi_api.FuncType,
          arg_types,
          ret_type,
          type_params,
          type_constraints,
      )
  
imports: from enum import IntEnum
  import tvm
  import tvm._ffi
  from tvm.runtime import Scriptable
  from .None import _ffi_api
  from .base import Node
label_desc: Use image node_id 1 to create a new FuncType object from inherited base classes: Type with example: obj = FuncType(arg_types, ret_type, type_params, type_constraints)