haskell-tools-ast-0.1.2.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 a
= KindConstraint { _kindConstr :: Ann Kind a
}
-- | Haskell kinds
data Kind a
= KindStar -- ^ @*@, the kind of types
| KindUnbox -- ^ @#@, the kind of unboxed types
| KindFn { _kindLeft :: Ann Kind a
, _kindRight :: Ann Kind a
} -- ^ @->@, the kind of type constructor
| KindParen { _kindParen :: Ann Kind a
} -- ^ A parenthesised kind
| KindVar { _kindVar :: Ann Name a
} -- ^ kind variable (using @PolyKinds@ extension)
| KindApp { _kindAppFun :: Ann Kind a
, _kindAppArg :: Ann Kind a
} -- ^ Kind application (@ k1 k2 @)
| KindList { _kindElem :: Ann Kind a
} -- ^ A list kind (@ [k] @)
| KindPromoted { _kindPromoted :: Ann (Promoted Kind) a
} -- ^ A promoted kind (@ '(k1,k2,k3) @)
data Promoted t a
= PromotedInt { _promotedIntValue :: Integer }
| PromotedString { _promotedStringValue :: String }
| PromotedCon { _promotedConName :: Ann Name a }
| PromotedList { _promotedElements :: AnnList t a }
| PromotedTuple { _promotedElements :: AnnList t a }
| PromotedUnit