Ученики раз за разом читают (x, x) в OCaml как «обе половины равны». Это не так, и такой паттерн вообще недопустим.
Новичок обычно хватается за одно из двух объяснений. В первом x сначала даёт имя компоненту, а второе вхождение сравнивается с ним. Во втором каждая переменная в паттерне вводит новую привязку, так что повтор x просто даёт ошибку. OCaml требует, чтобы переменные в паттерне были линейными, поэтому верно второе, и компилятор такой паттерн отвергает.
Для маленького упражнения я заменяю его на (left, right) when left = right с запасной веткой ниже. Пусть ученики угадают, в какую ветку попадёт (3, 3). Потом меняем только второй компонент и спрашиваем снова про (3, 4).
Донести хочется разницу между тем, чтобы назвать части, и тем, чтобы проверить отношение между ними. До сих пор колеблюсь, назвать правило о привязках сразу или дать неверному объяснению сначала развалиться.
