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:
2026-02-20 09:46:51 -05:00
parent caabaeeb9c
commit 1fc472a54c
6 changed files with 70 additions and 11 deletions

View File

@@ -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() {