Skip to content

Core Lint: more details on "Occurrence is GlobalId, but binding is LocalId"

Ben Price requested to merge wip/global-local-mismatch-info into master

I had a broken core pass (whilst working on #17478) which caused a top-level definition main to have the same unique as the builtin(?) runMainIO. This gave the confusing error that

Occurrence is GlobalId, but binding is LocalId
  runMainIO :: forall a. IO a -> IO a

This has now been changed to say (slightly trimmed)

Occurrence is GlobalId, but binding is LocalId
  occurrence:
    runMainIO :: forall a. IO a -> IO a
    [GblId]
  binder    :
    main :: IO ()
    [LclIdX,

which makes the problem much clearer, since the names runMainIO and main obviously differ.

Merge request reports