feat: support module-qualified constructor patterns in match expressions (issue 3)
Added module: Option<Ident> to Pattern::Constructor, updated parser to handle module.Constructor(args) syntax in patterns, exported ADT constructors from modules, and copied type definitions during module import so types like Shape are usable in importing files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -981,6 +981,13 @@ impl TypeChecker {
|
||||
if !fields.is_empty() {
|
||||
self.env.bind(&name, TypeScheme::mono(Type::Record(fields)));
|
||||
}
|
||||
|
||||
// Also copy type definitions so imported types are usable
|
||||
for (type_name, type_def) in &module_checker.env.types {
|
||||
if !self.env.types.contains_key(type_name) {
|
||||
self.env.types.insert(type_name.clone(), type_def.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
ImportKind::Direct => {
|
||||
// Import a specific name directly
|
||||
@@ -2476,7 +2483,7 @@ impl TypeChecker {
|
||||
Vec::new()
|
||||
}
|
||||
|
||||
Pattern::Constructor { name, fields, span } => {
|
||||
Pattern::Constructor { name, fields, span, .. } => {
|
||||
// Look up constructor
|
||||
// For now, handle Option specially
|
||||
match name.name.as_str() {
|
||||
|
||||
Reference in New Issue
Block a user