List.single implementation

This commit is contained in:
Chad Stearns 2020-06-03 18:56:23 -04:00
parent d79f1af126
commit 97cb4a737e
5 changed files with 109 additions and 1 deletions

View file

@ -593,6 +593,28 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
)
});
add_type(Symbol::LIST_SINGLE, {
let u = UVAR1;
let v = UVAR2;
let star = UVAR4;
let a = TVAR1;
unique_function(
vec![SolvedType::Apply(
Symbol::ATTR_ATTR,
vec![disjunction(u, vec![v]), flex(a)],
)],
SolvedType::Apply(
Symbol::ATTR_ATTR,
vec![
boolean(star),
SolvedType::Apply(Symbol::LIST_LIST, vec![attr_type(u, a)]),
],
),
)
});
// push : Attr (w | u | v) (List (Attr u a))
// , Attr (u | v) a
// -> Attr * (List (Attr u a))