{-# LANGUAGE CPP #-} module Main where import Language.Haskell.Meta.Parse #if MIN_VERSION_haskell_src_exts(1,18,0) import qualified Language.Haskell.Exts as Exts #else import qualified Language.Haskell.Exts.Annotated as Exts #endif import qualified Language.Haskell.TH as TH import Test.Framework import Test.Framework.Providers.HUnit import Test.HUnit (Assertion, (@?=)) main :: IO () main = defaultMain tests tests :: [Test] tests = [derivingClausesTest] derivingClausesTest :: Test derivingClausesTest = testCase "Deriving clauses preserved" $ roundTripDecls "data Foo = Foo deriving (A, B, C)" roundTripDecls :: String -> Assertion roundTripDecls s = do declsExts <- liftEither $ parseHsDecls s declsExts' <- liftEither $ parseDecs s >>= parseHsDecls . TH.pprint declsExts' @?= declsExts liftEither :: Monad m => Either String a -> m a liftEither = either fail return