module Language.Haskell.Tools.AST.Representation.Types where
import Language.Haskell.Tools.AST.Ann (Ann, AnnListG, AnnMaybeG)
import Language.Haskell.Tools.AST.Representation.Kinds (UPromoted, UKind, UKindConstraint)
import Language.Haskell.Tools.AST.Representation.Names (UName, UOperator)
import {-# SOURCE #-} Language.Haskell.Tools.AST.Representation.TH (UQuasiQuote, USplice)
data UTyVar dom stage
= UTyVarDecl { _tyVarName :: Ann UName dom stage
, _tyVarKind :: AnnMaybeG UKindConstraint dom stage
}
data UType dom stage
= UTyForall { _typeBounded :: AnnListG UTyVar dom stage
, _typeType :: Ann UType dom stage
}
| UTyCtx { _typeCtx :: Ann UContext dom stage
, _typeType :: Ann UType dom stage
}
| UTyFun { _typeParam :: Ann UType dom stage
, _typeResult :: Ann UType dom stage
}
| UTyTuple { _typeElements :: AnnListG UType dom stage
}
| UTyUnbTuple { _typeElements :: AnnListG UType dom stage
}
| UTyList { _typeElement :: Ann UType dom stage
}
| UTyParArray { _typeElement :: Ann UType dom stage
}
| UTyApp { _typeCon :: Ann UType dom stage
, _typeArg :: Ann UType dom stage
}
| UTyVar { _typeName :: Ann UName dom stage
}
| UTyParen { _typeInner :: Ann UType dom stage
}
| UTyInfix { _typeLeft :: Ann UType dom stage
, _typeOperator :: Ann UOperator dom stage
, _typeRight :: Ann UType dom stage
}
| UTyKinded { _typeInner :: Ann UType dom stage
, _typeKind :: Ann UKind dom stage
}
| UTyPromoted { _tpPromoted :: Ann (UPromoted UType) dom stage
}
| UTySplice { _tsSplice :: Ann USplice dom stage
}
| UTyQuasiQuote { _typeQQ :: Ann UQuasiQuote dom stage
}
| UTyBang { _typeInner :: Ann UType dom stage
}
| UTyLazy { _typeInner :: Ann UType dom stage
}
| UTyUnpack { _typeInner :: Ann UType dom stage
}
| UTyNoUnpack { _typeInner :: Ann UType dom stage
}
| UTyWildcard
| UTyNamedWildc { _typeWildcardName :: Ann UName dom stage
}
| UUnbSumType { _typeElements :: AnnListG UType dom stage
}
data UContext dom stage
= UContext { _contextAssertion :: Ann UAssertion dom stage
}
data UAssertion dom stage
= UClassAssert { _assertClsName :: Ann UName dom stage
, _assertTypes :: AnnListG UType dom stage
}
| UInfixAssert { _assertLhs :: Ann UType dom stage
, _assertOp :: Ann UOperator dom stage
, _assertRhs :: Ann UType dom stage
}
| UImplicitAssert { _assertImplVar :: Ann UName dom stage
, _assertImplType :: Ann UType dom stage
}
| UTupleAssert { _innerAsserts :: AnnListG UAssertion dom stage
}
| UWildcardAssert