@@ -7,6 +7,7 @@ import qualified Language.Haskell.Exts as Exts
7
7
import qualified Language.Haskell.Exts.Extension as Extension
8
8
import qualified Language.Haskell.Exts.Parser as Parser
9
9
import Language.Haskell.Meta.Parse
10
+ import Language.Haskell.Meta.Syntax.Translate
10
11
import qualified Language.Haskell.TH as TH
11
12
-- import Test.Framework
12
13
-- import Test.Framework.Providers.HUnit
@@ -24,12 +25,22 @@ tests = [ derivingClausesTest
24
25
#if MIN_VERSION_template_haskell(2,12,0)
25
26
, typeAppTest
26
27
#endif
28
+ , orderInTypeTuples
27
29
]
28
30
29
31
derivingClausesTest :: Test
30
32
derivingClausesTest = testCase " Deriving clauses preserved" $
31
33
roundTripDecls " data Foo = Foo deriving (A, B, C)"
32
34
35
+ -- Very ugly test, illustrating incorrect order of promoted type tuples reconstructed into TH
36
+ orderInTypeTuples :: Test
37
+ orderInTypeTuples = testCase " Ensure that type tuples reconstructed in proper order" $ do
38
+ let Parser. ParseOk parsed = show . toExp <$> Parser. parseExpWithMode mode " getField @'(\" a\" , \" b\" , \" c\" ) localVar"
39
+ parsed @?= expected
40
+ where
41
+ mode = Parser. defaultParseMode { Parser. extensions = [Extension. EnableExtension Extension. TypeApplications , Extension. EnableExtension Extension. DataKinds ] }
42
+ expected = " (AppE (AppTypeE (VarE getField) (AppT (AppT (AppT (PromotedTupleT 3) (LitT (StrTyLit \" a\" ))) (LitT (StrTyLit \" b\" ))) (LitT (StrTyLit \" c\" )))) (VarE localVar))"
43
+
33
44
typeAppMode :: Exts. ParseMode
34
45
typeAppMode = Parser. defaultParseMode { Parser. extensions = [Extension. EnableExtension Extension. TypeApplications ] }
35
46
0 commit comments