Для нормального сопоставления с шаблоном необходимо оценить значение, которое должно быть сопоставлено, чтобы его можно было сравнить с шаблоном.
~
обозначает ленивое сопоставление с образцом: просто предполагается, что значение будет соответствовать образцу. В этом случае сопоставление выполняется только позже, если фактически используется значение сопоставляемой переменной.