В Haskell функции являются неотъемлемой частью языка, главным образом потому, что Haskell основан на лямбда-исчислении .
В лямбда-исчислении есть функции, которые имеют «свободные переменные», что означает, что они используют переменные, которые не были переданы им в качестве прямых параметров. Функции со свободными переменными - это то, что вы бы назвали «замыканиями» в этом случае.
Поскольку функции со свободными переменными так распространены в LC, они также составляют неотъемлемую часть языка Haskell. Например, когда вы пишете это:
f a b c = a * b + c
... вы могли бы также написать это, с тем же результатом:
f a b = \ c -> a * b + c
... или даже:
f a b = let product = a * b in \ c -> product + c
... дальнейшие эквивалентные изменения:
f a = \ b -> let product = a * b in \ c -> product + c
Это потому, что Haskell по существу создает функции со свободными переменными везде , и, таким образом, замыкания создаются постоянно. Некоторые из них могут быть оптимизированы компилятором, но можно предположить, что будет использовано больше замыканий, чем вы когда-либо сможете обнаружить самостоятельно.
Итак, не пытайтесь найти замыкания; в Хаскеле они не являются чем-то особенным и используются постоянно.