haskell-tools-ast-0.1.3.0: Language/Haskell/Tools/AST/Kinds.hs
-- | Representation of Haskell Kinds
module Language.Haskell.Tools.AST.Kinds where
import Language.Haskell.Tools.AST.Literals
import Language.Haskell.Tools.AST.Ann
import Language.Haskell.Tools.AST.Base
-- | Kind constraint (@ :: * -> * @)
data KindConstraint dom stage
= KindConstraint { _kindConstr :: Ann Kind dom stage
}
-- | Haskell kinds
data Kind dom stage
= KindStar -- ^ @*@, the kind of types
| KindUnbox -- ^ @#@, the kind of unboxed types
| KindFn { _kindLeft :: Ann Kind dom stage
, _kindRight :: Ann Kind dom stage
} -- ^ @->@, the kind of type constructor
| KindParen { _kindParen :: Ann Kind dom stage
} -- ^ A parenthesised kind
| KindVar { _kindVar :: Ann Name dom stage
} -- ^ kind variable (using @PolyKinds@ extension)
| KindApp { _kindAppFun :: Ann Kind dom stage
, _kindAppArg :: Ann Kind dom stage
} -- ^ Kind application (@ k1 k2 @)
| KindList { _kindElem :: Ann Kind dom stage
} -- ^ A list kind (@ [k] @)
| KindPromoted { _kindPromoted :: Ann (Promoted Kind) dom stage
} -- ^ A promoted kind (@ '(k1,k2,k3) @)
data Promoted t dom stage
= PromotedInt { _promotedIntValue :: Integer }
| PromotedString { _promotedStringValue :: String }
| PromotedCon { _promotedConName :: Ann Name dom stage }
| PromotedList { _promotedElements :: AnnList t dom stage }
| PromotedTuple { _promotedElements :: AnnList t dom stage }
| PromotedUnit