ArkScript-lang / ArkScript-lang/Ark

Unexpected module resolution

Open
#712 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
728
Forks
54
Avg merge
4h 8m
Merged PRs (30d)
2

Description

### What happened?

```
(import std.Prelude)
(import std.List:*)
(print (max [1 2]))
```
```
(import std.Prelude)
(import std.List :max)
(print (max [1 2]))
```

In both these examples, I would expect `max` to be `list:max`, but instead it's `math:max`. I find that confusing, because `math:max` is not defined nor imported without the prefix in either module.

Both examples work as I'd expect (`max` resolving to `math:max`--EDIT: `list:max`, sorry!) if the order of imports is reversed.

### What ArkScript version are you seeing the problem on?

4.7.2

### Operating System

Linux

### Compiler used

None

### Compiler version used

_No response_

### Relevant code & log output

```shell
ArityError: When calling `(math:max [1 2])', received 1 argument, but expected 2: `(math:max _a _b)'


At IP: 597, PP: 0, SP: 3
exit status 1
```

### Documentation

- [x] I have read existing related documentation before submitting this report
- [x] I have searched for an existing issue before posting

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by running both import examples on ArkScript 4.7.2 and tracing how import order resolves unqualified names. Compare the resolution of `max` with the explicitly imported `list:max` and the qualified `math:max`. Done means both examples resolve `max` to `list:max` regardless of import order.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
65/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.