def function_type
      @out << @input.scan(/function\(/)

      skip_whitespace
      if !@input.check(/\)/)
        return false unless function_type_arguments
      end

      return false unless @input.scan(/\)/)
      @out << ")"

      skip_whitespace
      if @input.scan(/:/)
        @out << ":"
        skip_whitespace
        return false unless null_type
      end

      true
    end
def function_type
      @out << @input.scan(/function\(/)

      skip_whitespace
      if !@input.check(/\)/)
        return false unless function_type_arguments
      end

      return false unless @input.scan(/\)/)
      @out << ")"

      skip_whitespace
      if @input.scan(/:/)
        @out << ":"
        skip_whitespace
        return false unless null_type
      end

      true
    end
<function-type> ::= "function(" <function-type-arguments> ")" [ ":" <null-type> ]