镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Unexpected module resolution #712

Open

Description

@emgordon154

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

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

  • I have read existing related documentation before submitting this report
  • I have searched for an existing issue before posting

Activity

  1. SuperFola commented on Sep 9, 2026

    @SuperFola
    Member

    Thanks for the report, it is indeed unexpected and annoying.

    I've managed to reduce the samples to the following:

    (import std.Math :round)
    (import std.List:*)
    
    (print (max [1 2]))

    and another one that seems related:

    (import std.Math :round)
    (import std.List :max)
    
    (print (max [1 2]))

    I'll see what I can do about that.

  2. SuperFola commented on Sep 17, 2026

    @SuperFola
    Member

    I've started to work on that problem, which will require a rewrite of the name resolution pass. That might take some time and a lot of testing, I'm hoping that it should be done for the 4.8.0 or 4.9.0 if it's not breaking.

    Basically, we resolve names with a very wacky algorithm, instead of having a list of direct and indirect imports available in each file. That leads to uncertainty in the algorithm deciding what the fully qualified name of a symbol is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions