This commit is contained in:
Folkert 2020-06-22 23:48:37 +02:00
parent 0fbac382d0
commit 2a7bf2ae66
2 changed files with 16 additions and 8 deletions

View File

@ -696,20 +696,30 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
)
});
// map : Attr * (List a)
// , Attr Shared (a -> b)
// map : Attr (* | u) (List (Attr u a))
// , Attr Shared (Attr u a -> b)
// -> Attr * (List b)
add_type(Symbol::LIST_MAP, {
let u = tvar!();
let a = tvar!();
let b = tvar!();
let star1 = tvar!();
let star2 = tvar!();
unique_function(
vec![
list_type(star1, a),
SolvedType::Apply(
Symbol::ATTR_ATTR,
vec![shared(), SolvedType::Func(vec![flex(a)], Box::new(flex(b)))],
vec![
container(star1, vec![u]),
SolvedType::Apply(Symbol::LIST_LIST, vec![attr_type(u, a)]),
],
),
SolvedType::Apply(
Symbol::ATTR_ATTR,
vec![
shared(),
SolvedType::Func(vec![attr_type(u, a)], Box::new(flex(b))),
],
),
],
list_type(star2, b),

View File

@ -2028,7 +2028,7 @@ mod test_uniq_solve {
fn list_map_identity() {
infer_eq(
indoc!(r#"\list -> List.map list (\x -> x)"#),
"Attr * (Attr * (List a) -> Attr * (List a))",
"Attr * (Attr (* | a) (List (Attr a b)) -> Attr * (List (Attr a b)))",
);
}
@ -2102,11 +2102,10 @@ mod test_uniq_solve {
fn list_map() {
infer_eq(
indoc!("List.map"),
"Attr * (Attr * (List a), Attr Shared (a -> b) -> Attr * (List b))",
"Attr * (Attr (* | a) (List (Attr a b)), Attr Shared (Attr a b -> c) -> Attr * (List c))",
);
}
/*
#[test]
fn list_foldr() {
infer_eq(
@ -2114,7 +2113,6 @@ mod test_uniq_solve {
"Attr * (Attr (* | a) (List (Attr a b)), Attr Shared (Attr a b, c -> c), c -> c)",
);
}
*/
#[test]
fn list_push_singleton() {