hhvm icon indicating copy to clipboard operation
hhvm copied to clipboard

[ Typechecker ] Message when passing A where B is expected when A and B are newtypes does not mention A, just ?nonnull

Open lexidor opened this issue 4 years ago • 0 comments

Describe the bug Message when passing KindOfHerp where KindOfDerp is expected when KindOfHerp and KindOfDerp are newtypes does not mention KindOfHerp. Instead it says that the newtype is constrained to ?nonnull a.k.a. mixed.

Standalone code, or other way to reproduce the problem

// file1.hack
newtype KindOfHerp = string;
newtype KindOfDerp = string;

function herp(): KindOfHerp {
    return 'KindOfHerp';
}

// file2.hack
function derp(): KindOfDerp {
    return herp();
}

Steps to reproduce the behavior:

  1. hh_client

Expected behavior

Typing[4110] Invalid return type [1]
-> Expected KindOfDerp [2]
-> But got KindOfHerp [3]

Actual behavior

Typing[4110] Invalid return type [1]
-> Expected KindOfDerp [2]
-> But got mixed arising from an implicit as ?nonnull constraint on this type [3]

Environment

  • Operating system

Ubuntu 18.04

  • Installation method

apt-get with dl.hhvm.com repository

  • HHVM Version
HipHop VM 4.107.0 (rel)
Compiler: 1619546863_111004381
Repo schema: d1ae8e21bf3419a65f12a010527485564e719d07
hackc-c7fffd36e382b7f28420653e7a0f0e78e61342a8-4.107.0

Additional context

The full error message, annotated with ^^^^ in highlighted parts of the error.

Typing[4110] Invalid return type [1]
-> Expected KindOfDerp [2]
-> But got mixed arising from an implicit as ?nonnull constraint on this type [3]

file1.hack:-:-
      | 
[2]   | function derp(): KindOfDerp {
                         ^^^^^^^^^^
[1]   |     return herp();
                   ^^^^^^
      | }

file2.hack:-:-
      | newtype KindOfDerp = string;
      | 
[3]   | function herp(): KindOfHerp {
                         ^^^^^^^^^^
      |     return 'KindOfHerp';
      | }

1 error found.

lexidor avatar May 02 '21 01:05 lexidor