¿El envío de un Haskell TypeClass es dinámico?

Dada la siguiente instantánea de código de Haskell:

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

Cuando el valor de a se determina en tiempo de ejecución, la clase se distribuye en este valor.

Supongo que el compilador puede verificar estáticamente los tipos en tiempo de compilación y asegurarse de que no se puedan enviar tipos no válidos.

Ahora, si comparamos esto con un despacho dinámico en 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);
  }
}

Suposiciones

Haskell puede enviar el tipo de retorno, así como múltiples argumentos que hacen que el envío sea diferente a otros idiomas.

Mi pregunta es:¿El envío de un Haskell TypeClass es dinámico?

Respuestas a la pregunta(2)

Su respuesta a la pregunta