diff options
Diffstat (limited to 'testsuite/tests/th/T23203.hs')
-rw-r--r-- | testsuite/tests/th/T23203.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/testsuite/tests/th/T23203.hs b/testsuite/tests/th/T23203.hs new file mode 100644 index 0000000000..0f8971698d --- /dev/null +++ b/testsuite/tests/th/T23203.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE PatternSynonyms #-} +{-# LANGUAGE TemplateHaskell #-} +module T23203 where + +import Language.Haskell.TH + +data D = MkD Int + +$(do let -- The original example from #23203 + genPat1 :: Q [Dec] + genPat1 = sequence [ + patSynD name (prefixPatSyn []) unidir wildP + , pure $ PragmaD $ InlineP name Inline FunLike AllPhases + ] + where name = mkName "A" + + -- A slightly more complicated example that also puts an INLINE pragma + -- on a field name in a record pattern synonym + genPat2 :: Q [Dec] + genPat2 = sequence [ + patSynD con_name (recordPatSyn [fld_name]) implBidir (conP 'MkD [varP fld_name]) + , pure $ PragmaD $ InlineP con_name Inline FunLike AllPhases + , pure $ PragmaD $ InlineP fld_name Inline FunLike AllPhases + ] + where con_name = mkName "P" + fld_name = mkName "fld" + + decs1 <- genPat1 + decs2 <- genPat2 + pure (decs1 ++ decs2)) |