{-# LANGUAGE CPP, FlexibleContexts #-}
-- | Type restrictions of 'convert'
module Language.Haskell.TH.Build.Convertible.Restr where

import Language.Haskell.TH
import Language.Haskell.TH.Build.Convertible

#define MAKE_CONVERT_TO(N,T) N :: Convertible a T => a -> T; N = convert

MAKE_CONVERT_TO(expQ,ExpQ)
MAKE_CONVERT_TO(expQs,[ ExpQ ])
MAKE_CONVERT_TO(patQ,PatQ)
MAKE_CONVERT_TO(patQs,[PatQ])
MAKE_CONVERT_TO(typeQ,TypeQ)
MAKE_CONVERT_TO(typeQs,[ TypeQ ])
MAKE_CONVERT_TO(name,Name)
MAKE_CONVERT_TO(tyVarBndr,TyVarBndr)
MAKE_CONVERT_TO(conQ,ConQ)
MAKE_CONVERT_TO(cxtQ,CxtQ)
MAKE_CONVERT_TO(strictTypeQ,StrictTypeQ)
MAKE_CONVERT_TO(strictTypeQs,[StrictTypeQ])
MAKE_CONVERT_TO(decsQ,DecsQ)

#undef MAKE_CONVERT_TO