let
и where
также являются образцовыми совпадениями, например case
, но только с одной альтернативой. Так, например, в let
выражение:
let SR f = xx in ...
подобно следующему выражению: case
case xx of
SR f -> ...
Большинство людей просто использовать let
и where
сделать простой привязки переменных, так что они не понимают, что они совпадения моделей. Однако привязка переменной является лишь особым случаем соответствия шаблону (идентификатор в совпадении с шаблоном соответствует всем и привязывает значение к переменной).
Кроме того, для большинства совпадений моделей требуется более одной альтернативы, поэтому let
не применяется. Даже если вы хотите только соответствовать конкретному конструктору, выполнение неполного совпадения шаблонов - не очень хорошая идея. Однако есть определенные случаи, когда одна альтернатива является полным совпадением, например, соответствие кортежа (x, y)
или, как в вашем случае, тип данных с одним конструктором.
Что вы ожидали? –