Избегайте временных переменных, используя затенение имен

Я создаю много временных переменных в Haskell:

main = do
    let nums'' = [1..10]
    let nums' = a . bunch . of_ . functions $ nums''
    let nums = another . bunch . of_ . functions $ nums'
    print nums

То есть я не хочу писать длинную цепочку функций вот так:

let nums = another . bunch . of_ . functions . a . bunch . of_ . functions $ [1..10]

Потому что она становится нечитаемой для меня , поэтому я пытаюсь сгруппировать функции в соответствии с тем, что они делают. В процессе я создаю кучу уродливых временных переменных, таких как nums''и nums'(я мог бы дать им более осмысленные имена, но смысл остается в силе... новая строка означает новую переменную). Это тот случай, когда затененная переменная приведет к более чистому коду. Я хотел бы сделать что-то вроде:

let nums = [1..10]
nums = a . bunch . of_ . functions $ nums
nums = another . bunch . of_ . functions $ nums

I.e. точно так же, как и выше, но без временных переменных. Есть ли способ сделать это в Haskell? Возможно, все это можно было бы обернуть в «транзакцию»:

atomically $ do
  (...this code...)
  return nums

Что-то, что сообщит Haskell, что код в этом разделе содержит затененные переменные, и он должен беспокоиться только о конечном результате. Возможно ли это?

6
задан Don Stewart 17 May 2012 в 19:44
поделиться