Tipo de entendimento Parâmetros no Scala

Estou tentando entender os parâmetros de tipo no Scala. Vejamos o seguinte exemplo geral:

def func1[T](a : T) : T = a

Eu entendo que func1 leva 1 parâmetro de qualquer tipo e retorna esse parâmetro do mesmo tipo. O que eu não entendo é o porquê:

def func1[T]

Por que [T] logo após a função1 ?? Nós poderíamos simplesmente escrever sem [T] depois de func1, como:

def func1(a : T) : T = a

1) O que isso significa [T] após a função1 e por que a colocamos lá?

2) Por que fazemos o mesmo com as aulas?

class MyClass[T]{...}

Quero dizer, as instanciações do MyClass são do tipo MyClass. O que significa [T] lá? Você não diz que tenho uma classe booleana do tipo MyClass, diz que tenho um objeto do tipo MyClass, certo?

Desde já, obrigado.

questionAnswers(1)

yourAnswerToTheQuestion