Мартинг Одерски в своей книге пишет:
Класс::, выраженный "cons" для "construct", представляет собой непустые списки.
и
Методы построения списка:: и: являются специальными. Потому что они заканчиваются в двоеточие, они связаны с их правым операндом. То есть, операция, такая как x:: xs, рассматривается как вызов метода xs.::(x), а не x.::(xs). Фактически, x.::(xs) не имеет смысла, так как x имеет список тип элемента, который может быть произвольным, поэтому мы не можем предположить, что это type будет иметь метод:: . По этой причине метод:: должен взять значение элемента и получить новый список
Итак, ::
метод или класс?