module Language.Haskell.Tools.AST.Representation.Kinds where
import Language.Haskell.Tools.AST.Ann (Ann, AnnListG)
import Language.Haskell.Tools.AST.Representation.Names (UName, UOperator)
import Language.Haskell.Tools.AST.Representation.Types (UType)
data UKindConstraint dom stage
= UKindConstraint { _kindConstr :: Ann UKind dom stage
}
data UKind dom stage
= UStarKind
| UUnboxKind
| UFunKind { _kindLeft :: Ann UKind dom stage
, _kindRight :: Ann UKind dom stage
}
| UParenKind { _kindParen :: Ann UKind dom stage
}
| UVarKind { _kindVar :: Ann UName dom stage
}
| UAppKind { _kindAppFun :: Ann UKind dom stage
, _kindAppArg :: Ann UKind dom stage
}
| UInfixAppKind { _kindLhs ::Ann UKind dom stage
, _kindAppOp :: Ann UOperator dom stage
, _kindRhs :: Ann UKind dom stage
}
| UListKind { _kindElem :: Ann UKind dom stage
}
| UTupleKind { _kindElems :: AnnListG UKind dom stage
}
| UPromotedKind { _kindPromoted :: Ann (UPromoted UKind) dom stage
}
| UTypeKind { _kindType :: Ann UType dom stage
}
data UPromoted t dom stage
= UPromotedInt { _promotedIntValue :: Integer
}
| UPromotedString { _promotedStringValue :: String
}
| UPromotedCon { _promotedConName :: Ann UName dom stage
}
| UPromotedList { _promotedElements :: AnnListG t dom stage
}
| UPromotedTuple { _promotedElements :: AnnListG t dom stage
}
| UPromotedUnit