air-2011.6.19: src/Air/TH/Air.hs
{-# LANGUAGE TemplateHaskell #-}
module Air.TH.Air where
import Language.Haskell.TH
import Control.Monad (replicateM)
{-
> $(tuple 3) [1,2,3,4,5]
(1,2,3)
> $(tuple 2) [1,2]
(1,2)
-}
tuple :: Int -> ExpQ
tuple n = do
ns <- replicateM n (newName "x")
lamE [foldr (\x y -> conP '(:) [varP x,y]) wildP ns] (tupE $ map varE ns)