summaryrefslogtreecommitdiff
path: root/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/template-haskell/Language/Haskell/TH/Syntax.hs')
-rw-r--r--libraries/template-haskell/Language/Haskell/TH/Syntax.hs29
1 files changed, 24 insertions, 5 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
index 9f7b5107f0..82e22dd212 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
@@ -1367,9 +1367,10 @@ data Dec
-- | pragmas
| PragmaD Pragma -- ^ @{ {\-# INLINE [1] foo #-\} }@
- -- | type families (may also appear in [Dec] of 'ClassD' and 'InstanceD')
- | FamilyD FamFlavour Name
- [TyVarBndr] (Maybe Kind) -- ^ @{ type family T a b c :: * }@
+ -- | data families (may also appear in [Dec] of 'ClassD' and 'InstanceD')
+ | DataFamilyD Name [TyVarBndr]
+ (Maybe Kind)
+ -- ^ @{ data family T a b c :: * }@
| DataInstD Cxt Name [Type]
[Con] [Name] -- ^ @{ data instance Cxt x => T [x] = A x
@@ -1380,9 +1381,17 @@ data Dec
-- deriving (Z,W)}@
| TySynInstD Name TySynEqn -- ^ @{ type instance ... }@
+ -- | open type families (may also appear in [Dec] of 'ClassD' and 'InstanceD')
+ | OpenTypeFamilyD Name
+ [TyVarBndr] FamilyResultSig
+ (Maybe InjectivityAnn)
+ -- ^ @{ type family T a b c = (r :: *) | r -> a b }@
+
| ClosedTypeFamilyD Name
- [TyVarBndr] (Maybe Kind)
- [TySynEqn] -- ^ @{ type family F a b :: * where ... }@
+ [TyVarBndr] FamilyResultSig
+ (Maybe InjectivityAnn)
+ [TySynEqn]
+ -- ^ @{ type family F a b = (r :: *) | r -> a where ... }@
| RoleAnnotD Name [Role] -- ^ @{ type role T nominal representational }@
| StandaloneDerivD Cxt Type -- ^ @{ deriving instance Ord a => Ord (Foo a) }@
@@ -1493,6 +1502,16 @@ data TyVarBndr = PlainTV Name -- ^ @a@
| KindedTV Name Kind -- ^ @(a :: k)@
deriving( Show, Eq, Ord, Data, Typeable, Generic )
+-- | Type family result signature
+data FamilyResultSig = NoSig -- ^ no signature
+ | KindSig Kind -- ^ @k@
+ | TyVarSig TyVarBndr -- ^ @= r, = (r :: k)@
+ deriving( Show, Eq, Ord, Data, Typeable, Generic )
+
+-- | Injectivity annotation
+data InjectivityAnn = InjectivityAnn Name [Name]
+ deriving ( Show, Eq, Ord, Data, Typeable, Generic )
+
data TyLit = NumTyLit Integer -- ^ @2@
| StrTyLit String -- ^ @"Hello"@
deriving ( Show, Eq, Ord, Data, Typeable, Generic )