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
data KindConstraint a
= KindConstraint { _kindConstr :: Ann Kind a
}
data Kind a
= KindStar
| KindUnbox
| KindFn { _kindLeft :: Ann Kind a
, _kindRight :: Ann Kind a
}
| KindParen { _kindParen :: Ann Kind a
}
| KindVar { _kindVar :: Ann Name a
}
| KindApp { _kindAppFun :: Ann Kind a
, _kindAppArg :: Ann Kind a
}
| KindList { _kindElem :: Ann Kind a
}
| KindPromoted { _kindPromoted :: Ann (Promoted Kind) a
}
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