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