Является ли отправка Haskell TypeClass динамической?

Учитывая следующий снимок кода Haskell:

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

Где значение a определяется во время выполнения - класс отправляет это значение.

Я предполагаю, что компилятор может статически проверять типы во время компиляции и гарантировать, что никакие недопустимые типы не могут отправлять на него.

Теперь, если мы сравним это с динамической отправкой в ​​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);
  }
}

Предположения:

Haskell может отправлять по типу возвращаемого значения, а также по нескольким аргументам, отличая отправку от других языков.

Мой вопрос:Является ли отправка Haskell TypeClass динамической?

Ответы на вопрос(1)

Ваш ответ на вопрос