-- | UPattern matching on statement-level AST fragments for refactorings. {-# LANGUAGE PatternSynonyms #-} module Language.Haskell.Tools.Rewrite.Match.Kinds where import Language.Haskell.Tools.AST import Language.Haskell.Tools.Rewrite.ElementTypes -- | Kind constraint (@ :: * -> * @) pattern KindConstraint :: Kind -> KindConstraint pattern KindConstraint k <- Ann _ (UKindConstraint k) -- | @*@, the kind of types pattern StarKind :: Kind pattern StarKind <- Ann _ UStarKind -- | @#@, the kind of unboxed types pattern UnboxKind :: Kind pattern UnboxKind <- Ann _ UUnboxKind -- | @->@, the kind of type constructor pattern FunKind :: Kind -> Kind -> Kind pattern FunKind a r <- Ann _ (UFunKind a r) -- | A parenthesised kind pattern ParenKind :: Kind -> Kind pattern ParenKind k <- Ann _ (UParenKind k) -- | Kind variable (using @PolyKinds@ extension) pattern VarKind :: Name -> Kind pattern VarKind v <- Ann _ (UVarKind v) -- | Kind application (@ k1 k2 @) pattern AppKind :: Kind -> Kind -> Kind pattern AppKind f a <- Ann _ (UAppKind f a) -- | A list kind (@ [k] @) pattern ListKind :: Kind -> Kind pattern ListKind k <- Ann _ (UListKind k) -- | Numeric value promoted to the kind level. pattern IntKind :: Integer -> Kind pattern IntKind i <- Ann _ (UPromotedKind (Ann _ (UPromotedInt i))) -- | String value promoted to the kind level. pattern StringKind :: String -> Kind pattern StringKind s <- Ann _ (UPromotedKind (Ann _ (UPromotedString s))) -- | A data constructor value promoted to the kind level. pattern ConKind :: Name -> Kind pattern ConKind s <- Ann _ (UPromotedKind (Ann _ (UPromotedCon s))) -- | A list of elements as a kind. pattern ListKindPromoted :: KindList -> Kind pattern ListKindPromoted elems <- Ann _ (UPromotedKind (Ann _ (UPromotedList elems))) -- | A tuple of elements as a kind. pattern TupleKind :: KindList -> Kind pattern TupleKind elems <- Ann _ (UPromotedKind (Ann _ (UPromotedTuple elems))) -- | Kind of the unit value @()@. pattern UnitKind :: Kind pattern UnitKind <- Ann _ (UPromotedKind (Ann _ UPromotedUnit))