List.walkRight definition in unique, std, builtins, etc. No implementation

This commit is contained in:
Chad Stearns 2020-09-06 14:06:08 -04:00
parent e69595b794
commit 5d0ec57461
9 changed files with 82 additions and 24 deletions

View file

@ -491,6 +491,19 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
),
);
// walkRight : List elem, (elem -> accum -> accum), accum -> accum
add_type(
Symbol::LIST_WALK_RIGHT,
SolvedType::Func(
vec![
list_type(flex(TVAR1)),
SolvedType::Func(vec![flex(TVAR1), flex(TVAR2)], Box::new(flex(TVAR2))),
flex(TVAR2),
],
Box::new(flex(TVAR2)),
),
);
// keepIf : List elem, (elem -> Bool) -> List elem
add_type(
Symbol::LIST_KEEP_IF,
@ -515,19 +528,6 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
),
);
// foldr : List a, (a -> b -> b), b -> b
add_type(
Symbol::LIST_FOLDR,
SolvedType::Func(
vec![
list_type(flex(TVAR1)),
SolvedType::Func(vec![flex(TVAR1), flex(TVAR2)], Box::new(flex(TVAR2))),
flex(TVAR2),
],
Box::new(flex(TVAR2)),
),
);
// append : List elem, elem -> List elem
add_type(
Symbol::LIST_APPEND,

View file

@ -784,8 +784,8 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
});
// keepIf : Attr * (List a)
// , Attr Shared (a -> Attr * Bool)
// -> Attr * (List a)
// , Attr Shared (a -> Attr * Bool)
// -> Attr * (List a)
add_type(Symbol::LIST_KEEP_IF, {
let_tvars! { a, star1, star2, star3 };
@ -798,11 +798,11 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
)
});
// foldr : Attr (* | u) (List (Attr u a))
// , Attr Shared (Attr u a -> b -> b)
// , b
// -> b
add_type(Symbol::LIST_FOLDR, {
// walkRight : Attr (* | u) (List (Attr u a))
// , Attr Shared (Attr u a -> b -> b)
// , b
// -> b
add_type(Symbol::LIST_WALK_RIGHT, {
let_tvars! { u, a, b, star1 };
unique_function(