本地绑定

列表推导可以引入变量的本地绑定来保存一些临时值:

[(x,y) | x <- [1..4], let y=x*x+1, even y]    -- [(1,2),(3,10)]

用技巧可以达到同样的效果,

[(x,y) | x <- [1..4], y <- [x*x+1], even y]   -- [(1,2),(3,10)]

像往常一样,列表推导中的 let 是递归的。但生成器绑定不是,它允许阴影

[x | x <- [1..4], x <- [x*x+1], even x]       -- [2,10]