O envio de um Haskell TypeClass é dinâmico?

Dado o seguinte instantâneo de código Haskell:

class Foo a where
   bar  :: a -> ...
   quux :: a -> ...
   ...

Onde o valor de a é determinado em tempo de execução - a classe despacha esse valor.

Estou assumindo que o compilador possa verificar estaticamente os tipos em tempo de compilação e garantir que nenhum tipo inválido possa despachar nele.

Agora, se compararmos isso com um despacho dinâmico em Java:

interface Flippable {
  Flippable flip();
}

class Left implements Flippable {
  Right flip();
}

class Right implements Flippable {
  Left flip();
}

class Demo {
  public static void main(String args[]) {
    Flippable flippable = new Right();
    System.out.println(flippable.flip);
  }
}

Premissas:

Haskell pode despachar no tipo de retorno, bem como vários argumentos, tornando o despacho diferente para outros idiomas.

Minha pergunta é:O envio de um Haskell TypeClass é dinâmico?

questionAnswers(2)

yourAnswerToTheQuestion