compiler icon indicating copy to clipboard operation
compiler copied to clipboard

in a lambda, wrong `let` types can cause "thread blocked indefinitely"

Open lue-bird opened this issue 2 years ago • 1 comments

Quick Summary: In a lambda, annotating the argument with the wrong type argument causes an error:

thread blocked indefinitely in an MVar operation

SSCCE

test : a -> a
test =
    \a ->
        let
            b : b
            b =
                a
        in
        b

elm throws

You ran into a compiler bug. Here are some details for the developers:

    b [rank = 2]

Please create an <http://sscce.org/> and then report it
at <https://github.com/elm/compiler/issues>


CallStack (from HasCallStack):
  error, called at compiler/src/Type/Solve.hs:206:15 in main:Type.Solve

-- ERROR -----------------------------------------------------------------------

I ran into something that bypassed the normal error reporting process! I
extracted whatever information I could from the internal error:

>   thread blocked indefinitely in an MVar operation

if the argument a is part of the declaration top

test : a -> a
test a = ...

the correct error is thrown

This a value is a:

a

But the type annotation on b says it should be:

b

The result type can be chosen arbitrarily*, for example () or Int. *If the result type is set to b a correct error is thrown

The body is an anonymous function of type:

b -> b

But the type annotation on test says it should be:

a -> b
  • Elm: 0.19.1
  • Operating System: Ubuntu 22.04.1 LTS

lue-bird avatar Feb 13 '23 13:02 lue-bird

Thanks for reporting this! To set expectations:

  • Issues are reviewed in batches, so it can take some time to get a response.
  • Ask questions in a community forum. You will get an answer quicker that way!
  • If you experience something similar, open a new issue. We like duplicates.

Finally, please be patient with the core team. They are trying their best with limited resources.

github-actions[bot] avatar Feb 13 '23 13:02 github-actions[bot]