Форма без точек против стиля

Можете ли вы преобразовать

-- tupleUnfold :: forall a. ((forall b. a -> b)) -> a -> ((b))
tupleUnfold :: Int -> ExpQ
tupleUnfold n = do
  xs <- forM [1 .. n] (const . newName $ "x")
  y <- newName "y"
  let y' = varE y
      g (ps', es') x = (varP x : ps', appE (varE x) y' : es')
      (ps, es) = foldl' g ([], []) xs
  lamE [tupP ps, varP y] (tupE es)

в безточечный стиль, сохранив при этом ясность (я знаю программу 'pointfree', но предпочел бы еще больше не запутывать код)?

В любом случае, какие изменения можно было бы внести, чтобы улучшить стиль функции или иным образом прояснить ее намерения? Функция предназначена для использования, как показано ниже.

$(tupleUnfold 3) ((+ 1), (+ 2), (+ 3)) 2
-- (3, 4, 5)

Какие правила именования лучше использовать (см. Переменные ps, ps ', es и es')?

6
задан ScootyPuff 21 November 2010 в 00:16
поделиться