module ADP.Fusion.TH.Common where import Data.Tuple.Select import Language.Haskell.TH import Language.Haskell.TH.Syntax -- | The last @Name@ of a rule is the name of the syntactic type of the -- result. getRuleResultType :: VarStrictType -> Name getRuleResultType vst = go $ sel3 vst where go t | AppT _ (VarT x) <- t = x | AppT _ x <- t = go x | otherwise = error $ "undetermined error:" ++ show vst