{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE MultiParamTypeClasses #-} -- | The test works if it builds! module Main where import Control.Monad import Language.Haskell.TH.ReifyMany class C a b where method :: b -> a data A = A B (Maybe B) data B = B Int -- Tests support of type synonym instances. type B' = B instance C B' Int where method _ = B 0 $(do ns <- reifyManyWithoutInstances ''C [''A] (const True) when (ns /= [''A, ''Maybe]) $ fail "Didn't get expected list of datatypes." return [] ) main :: IO () main = putStrLn "worked!"