1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use smallvec::SmallVec;
use crate::diag::location::{SourceLoc, SourceRange};
use crate::syntax::id::Identifier;
use crate::syntax::token::Token;
#[cfg_attr(test, derive(Debug))]
pub enum ConcreteType<'a> {
PrimitiveType(Token<'a>),
GenericType(Box<ConcreteGenericType<'a>>),
DeducedType(SourceRange),
UserType(Identifier<'a>)
}
#[cfg_attr(test, derive(Debug))]
pub struct ConcreteGenericType<'a> {
pub base: Token<'a>,
pub inner: SmallVec<[ConcreteType<'a>; 2]>,
pub left_angle: SourceLoc,
pub right_angle: SourceLoc
}