Нет, это невозможно. Однако в большинстве случаев это не нужно. Я подозреваю, что трюк, который вы пропустили, это снятие дорогих вычислений, которые не зависят от вывода через let. Сравните:
-- recomputes `sum [1..100]` each time you apply it to an argument
f1 :: Int -> Int
f1 n = n + sum [1..100]
-- computes `sum [1..100]` just once, then uses the "cached" result each time
-- you apply it to an argument
f2 :: Int -> Int
f2 = let s = sum [1..100] in \n -> n + s
Функция f1
стоит дорого каждый раз, когда вы ее используете. Функция f2
стоит дорого в первый раз, когда вы ее используете, но дешево каждый раз после этого.
(Этот ответ указывается от c до GH C. Другие компиляторы, если они существуют, могут вести себя по-другому.)