"Спрашивается, зачем нужен let, если есть лямбды? Может быть, это только синтаксический сахар?"
Неа.
test1 = let f x = x in (f 1, f "1")
test2 = (\ f -> (f 1, f "1")) (\ x -> x)
В первом случае определяется полиморфная функция (a -> a), и два раза специализируется.
Во втором случае для f определить тип невозможно, ошибка компиляции.
"Как может []
(
Read more... )