Struct kailua_types::ty::TySeq
[−]
[src]
pub struct TySeq { pub head: Vec<Ty>, pub tail: Option<Ty>, }
A sequence of value types.
Fields
head: Vec<Ty>
The "head" types, a list of finite types at the beginning of the sequence.
tail: Option<Ty>
The optional "tail" type. If present, it repeats indefinitely after "head".
This is implicitly nilable, because the actual value represented by the sequence
is never infinite, so there should be a nil
somewhere.
Since we don't know where it ends,
the tail should be implicitly unioned with nil
in all practical sense.
We may implicitly put the nil
here if it's missing,
but the absence of the tail type makes a few important differences in checking.
For example, function arguments are a sequence,
and excess parameters to non-variadic arguments should be forbidden
even if those excess parameters are always nil
.
This is only possible when we have a separate way to mark a missing tail.
Methods
impl TySeq
[src]
fn new() -> TySeq
fn from_kind_seq<T, F: for<'a> Fn(&'a T) -> &'a Spanned<Kind>>(
seq: &Seq<T, Spanned<Kind>>,
map: F,
resolv: &mut TypeResolver
) -> Result<TySeq>
seq: &Seq<T, Spanned<Kind>>,
map: F,
resolv: &mut TypeResolver
) -> Result<TySeq>
fn dummy() -> TySeq
fn ensure_at(&mut self, i: usize) -> &Ty
fn ensure_at_mut(&mut self, i: usize) -> &mut Ty
fn ensure_tail(self) -> Self
fn into_iter(self) -> SeqIter<Ty>
fn into_iter_with_none(
self
) -> Chain<Map<SeqIter<Ty>, fn(_: Ty) -> Option<Ty>>, Repeat<Option<Ty>>>
self
) -> Chain<Map<SeqIter<Ty>, fn(_: Ty) -> Option<Ty>>, Repeat<Option<Ty>>>
fn into_iter_with_nil(self) -> Chain<SeqIter<Ty>, Repeat<Ty>>
fn into_first(self) -> Ty
impl TySeq
[src]
fn all_with_loc<Loc: Into<Span>>(self, loc: Loc) -> SpannedTySeq
fn all_without_loc(self) -> SpannedTySeq
Trait Implementations
impl Clone for TySeq
[src]
fn clone(&self) -> TySeq
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0
Performs copy-assignment from source
. Read more
impl PartialEq for TySeq
[src]
fn eq(&self, __arg_0: &TySeq) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, __arg_0: &TySeq) -> bool
This method tests for !=
.
impl<'a> From<T<'a>> for TySeq
[src]
impl From<Ty> for TySeq
[src]
impl Dummy for TySeq
[src]
impl Union for TySeq
[src]
type Output = TySeq
A type of the resulting type.
fn union(
&self,
other: &TySeq,
explicit: bool,
ctx: &mut TypeContext
) -> TypeResult<TySeq>
&self,
other: &TySeq,
explicit: bool,
ctx: &mut TypeContext
) -> TypeResult<TySeq>
Calculates a union type of self
and other
, explicitly or implicitly. Read more
impl Lattice for TySeq
[src]
fn assert_sub(&self, other: &TySeq, ctx: &mut TypeContext) -> TypeResult<()>
Asserts that self
is a consistent subtype of other
under the type context.
fn assert_eq(&self, other: &TySeq, ctx: &mut TypeContext) -> TypeResult<()>
Asserts that self
is a consistent type equal to other
under the type context.