Skip to content

Incorrect ability inference #5708

Open
Open
@etorreborre

Description

@etorreborre

The following code is extracted from an experiment I was running:

type Options r = { runtime: '{r} () }

Options.override : a r -> Options r -> Options r
Options.override _a o = o

Registry.run : Options r1 -> '(a r2)-> (a {r1, r2})
Registry.run options exp = todo "run"

type Converter g
  = { convert : '{g} () }

type Logger g
  = { info : '{g} () }

type Registered a = {
  constructor: 'a,
}

logger : Registered (Logger {Store [Text]})
logger = Registered do Logger ('())

options = (Options '()) |> Options.override logger

converter = '(Registry.run options '(Converter '()))
testConverter = convert (converter()) ()

Running this code in ucm returns:

The expression in red needs the {Logger {Store [Text]}} ability, but this location does not have access to any abilities.
  
     25 | testConverter = convert (converter()) ()

The incorrect part is seeing a type being promoted to an ability in the error message.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions