feat: add List.findIndex, List.zip, List.flatten, List.contains
Add missing List operations requested by ergon game engine project: - findIndex(list, predicate) -> Option<Int> - zip(list1, list2) -> List<(A, B)> - flatten(listOfLists) -> List<A> - contains(list, element) -> Bool Resolves ergon porting blocker #4. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
34
src/types.rs
34
src/types.rs
@@ -1539,6 +1539,16 @@ impl TypeEnv {
|
||||
Type::Option(Box::new(Type::var())),
|
||||
),
|
||||
),
|
||||
(
|
||||
"findIndex".to_string(),
|
||||
Type::function(
|
||||
vec![
|
||||
Type::List(Box::new(Type::var())),
|
||||
Type::function(vec![Type::var()], Type::Bool),
|
||||
],
|
||||
Type::Option(Box::new(Type::Int)),
|
||||
),
|
||||
),
|
||||
(
|
||||
"any".to_string(),
|
||||
Type::function(
|
||||
@@ -1603,6 +1613,30 @@ impl TypeEnv {
|
||||
)
|
||||
},
|
||||
),
|
||||
(
|
||||
"zip".to_string(),
|
||||
Type::function(
|
||||
vec![
|
||||
Type::List(Box::new(Type::var())),
|
||||
Type::List(Box::new(Type::var())),
|
||||
],
|
||||
Type::List(Box::new(Type::Tuple(vec![Type::var(), Type::var()]))),
|
||||
),
|
||||
),
|
||||
(
|
||||
"flatten".to_string(),
|
||||
Type::function(
|
||||
vec![Type::List(Box::new(Type::List(Box::new(Type::var()))))],
|
||||
Type::List(Box::new(Type::var())),
|
||||
),
|
||||
),
|
||||
(
|
||||
"contains".to_string(),
|
||||
Type::function(
|
||||
vec![Type::List(Box::new(Type::var())), Type::var()],
|
||||
Type::Bool,
|
||||
),
|
||||
),
|
||||
]);
|
||||
env.bind("List", TypeScheme::mono(list_module_type));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user