Skip to content

Importing Custom Ability Panics Compile #6702

Open
@benplotke

Description

@benplotke

Steps to Reproduce

  1. Create SortAbility.roc with contents:
module [
    Comparison,
    Sort,
]

Comparison : [LessThan, Equal, GreaterThan]
Sort implements
    compare : a, a -> Comparison where a implements Sort
  1. In the same directory, create ImportAbility.roc with contents:
module [
]

import SortAbility
  1. run roc test AbilityImport.roc

Expected Results

Nothing

Actual

 ~/docs/code/roc/OrderedCollections $ ~/roc/roc_ben-build-2024-05-02-798dd77/roc test AbilityImport.roc
An internal compiler expectation was broken.
This is definitely a compiler bug.
Please file an issue here: https://github.com/roc-lang/roc/issues/new/choose
thread '<unnamed>' panicked at crates/compiler/load_internal/src/file.rs:4535:29:
Import ability member `SortAbility.compare` not available
stack backtrace:
   0: rust_begin_unwind
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:595:5
   1: core::panicking::panic_fmt
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/panicking.rs:67:14
   2: import_variable_for_symbol
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:4535:29
   3: roc_load_internal::file::add_imports::{{closure}}
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:4429:17
   4: roc_can::abilities::IAbilitiesStore<roc_can::abilities::Pending>::resolve_for_module::{{closure}}
             at /home/ben/roc/roc-src/crates/compiler/can/src/abilities.rs:621:44
   5: core::iter::adapters::map::map_fold::{{closure}}
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/iter/adapters/map.rs:84:28
   6: core::iter::traits::iterator::Iterator::fold
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/iter/traits/iterator.rs:2639:21
   7: fold<(roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>), std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>, (), core::iter::traits::iterator::Iterator::for_each::call::{closure_env#0}<(roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>), hashbrown::map::{impl#95}::extend::{closure_env#0}<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>, core::hash::BuildHasherDefault<wyhash::traits::WyHash>, alloc::alloc::Global, core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>>>>>
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/iter/adapters/map.rs:124:9
   8: for_each<core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>>, hashbrown::map::{impl#95}::extend::{closure_env#0}<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>, core::hash::BuildHasherDefault<wyhash::traits::WyHash>, alloc::alloc::Global, core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>>>>
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/iter/traits/iterator.rs:857:9
   9: extend<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>, core::hash::BuildHasherDefault<wyhash::traits::WyHash>, alloc::alloc::Global, core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>>>
             at /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.14.0/src/map.rs:6455:9
  10: extend<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>, core::hash::BuildHasherDefault<wyhash::traits::WyHash>, core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>>>
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/collections/hash/map.rs:3038:9
  11: from_iter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Resolved>, core::hash::BuildHasherDefault<wyhash::traits::WyHash>, core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<roc_module::symbol::Symbol, roc_can::abilities::AbilityMemberData<roc_can::abilities::Pending>>, roc_can::abilities::{impl#7}::resolve_for_module::{closure_env#0}<roc_load_internal::file::add_imports::Ctx, roc_load_internal::file::add_imports::{closure_env#0}, roc_load_internal::file::add_imports::{closure_env#1}>>>
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/collections/hash/map.rs:3023:13
  12: core::iter::traits::iterator::Iterator::collect
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/iter/traits/iterator.rs:2053:9
  13: roc_can::abilities::IAbilitiesStore<roc_can::abilities::Pending>::resolve_for_module
             at /home/ben/roc/roc-src/crates/compiler/can/src/abilities.rs:605:31
  14: add_imports
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:4417:27
  15: run_solve_solve
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:4604:47
  16: roc_load_internal::file::run_solve
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:4765:13
  17: roc_load_internal::file::run_task
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:6144:17
  18: worker_task
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:2091:34
  19: roc_load_internal::file::load_multi_threaded::{{closure}}::{{closure}}
             at /home/ben/roc/roc-src/crates/compiler/load_internal/src/file.rs:1831:25
  20: crossbeam_utils::thread::ScopedThreadBuilder::spawn::{{closure}}
             at /home/ben/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crossbeam-utils-0.8.16/src/thread.rs:440:31
  21: core::ops::function::FnOnce::call_once{{vtable.shim}}
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/ops/function.rs:250:5
  22: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/alloc/src/boxed.rs:2007:9
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Metadata

Metadata

Assignees

No one assigned

    Labels

    abilitiesRelates to the roc Abilities language featurebugSomething isn't workingloadingLoading modules from files

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions