【发布时间】:2010-11-21 00:16:13
【问题描述】:
你能转换吗
-- 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)
在保持清晰的同时采用无点样式(我知道程序“无点”,但更不想混淆代码)?
无论哪种方式,可以进行哪些更改来改进函数的样式,或者使其意图更清晰?该函数的用途如下。
$(tupleUnfold 3) ((+ 1), (+ 2), (+ 3)) 2
-- (3, 4, 5)
可以使用哪些更好的命名约定(参见 ps、ps'、es 和 es' 变量)?
【问题讨论】:
标签: haskell coding-style pointfree