1
1
{-# LANGUAGE CPP #-}
2
+ {-# LANGUAGE PatternSynonyms #-}
2
3
{-# LANGUAGE QuasiQuotes #-}
3
4
4
5
-- | Functions that should be part of @template-haskell@, but aren't.
8
9
module Categorifier.TH
9
10
( module Language.Haskell.TH ,
10
11
TyVarBndr ,
12
+ pattern PlainTV ,
13
+ pattern KindedTV ,
11
14
alphaEquiv ,
12
15
alphaRename ,
13
16
conP ,
@@ -37,16 +40,30 @@ import Data.Map (Map)
37
40
import qualified Data.Map as Map
38
41
import Data.Maybe (catMaybes , fromMaybe )
39
42
import Data.These (These (.. ))
40
- import Language.Haskell.TH hiding (TyVarBndr , conP , reifyType )
43
+ import Language.Haskell.TH hiding (TyVarBndr ( .. ) , conP , reifyType )
41
44
import qualified Language.Haskell.TH as TH
42
45
import PyF (fmt )
43
46
44
47
#if MIN_VERSION_template_haskell(2, 17, 0)
45
48
type TyVarBndr flag = TH. TyVarBndr flag
49
+
50
+ pattern PlainTV :: TH. Name -> TyVarBndr flag
51
+ pattern PlainTV n <- TH. PlainTV n _
52
+
53
+ pattern KindedTV :: TH. Name -> TH. Kind -> TyVarBndr flag
54
+ pattern KindedTV n k <- TH. KindedTV n _ k
46
55
#else
47
56
type TyVarBndr _flag = TH. TyVarBndr
57
+
58
+ pattern PlainTV :: TH. Name -> TyVarBndr flag
59
+ pattern PlainTV n = TH. PlainTV n
60
+
61
+ pattern KindedTV :: TH. Name -> TH. Kind -> TyVarBndr flag
62
+ pattern KindedTV n k = TH. KindedTV n k
48
63
#endif
49
64
65
+ {-# COMPLETE PlainTV, KindedTV #-}
66
+
50
67
conP :: TH. Name -> [TH. Pat ] -> TH. Pat
51
68
#if MIN_VERSION_template_haskell(2, 18, 0)
52
69
conP n = TH. ConP n []
@@ -69,13 +86,8 @@ reifyType =
69
86
#endif
70
87
71
88
tyVarBndrName :: TyVarBndr flag -> TH. Name
72
- #if MIN_VERSION_template_haskell(2, 17, 0)
73
- tyVarBndrName (TH. KindedTV n _ _) = n
74
- tyVarBndrName (TH. PlainTV n _) = n
75
- #else
76
- tyVarBndrName (TH. KindedTV n _) = n
77
- tyVarBndrName (TH. PlainTV n) = n
78
- #endif
89
+ tyVarBndrName (KindedTV n _) = n
90
+ tyVarBndrName (PlainTV n) = n
79
91
80
92
-- | It generates the fully-qualified name.
81
93
nameQualified :: TH. Name -> String
0 commit comments