{-# LANGUAGE CPP #-}
#if __GLASGOW_HASKELL__ >= 800
{-# LANGUAGE TemplateHaskellQuotes #-}
#endif
module Data.Tuple.Solo.TH (
tupE,
) where
#if MIN_VERSION_template_haskell(2,17,0)
import Language.Haskell.TH (tupE)
#else
import Data.Tuple.Solo
import qualified Language.Haskell.TH as TH
import qualified Language.Haskell.TH.Syntax as TH
makeTup :: [TH.Exp] -> TH.Exp
makeTup [x] = TH.AppE (TH.ConE soloConName) x
#if MIN_VERSION_template_haskell(2,16,0)
makeTup xs = TH.TupE (map Just xs)
#else
makeTup xs = TH.TupE xs
#endif
soloConName :: TH.Name
#if __GLASGOW_HASKELL__ >= 800
soloConName = 'Solo
#else
#ifndef CURRENT_PACKAGE_KEY
#error "CURRENT_PACKAGE_KEY undefined"
#endif
soloConName = TH.mkNameG_d CURRENT_PACKAGE_KEY "Data.Tuple.Solo" "MkSolo"
#endif
tupE :: Monad m => [m TH.Exp] -> m TH.Exp
tupE xs = do
xs' <- sequence xs
return (makeTup xs')
#endif