Skip to content

Signature Mismatch on external using opaque function type in rescript v12 #8038

@popstarfreas

Description

@popstarfreas

As part of migrating to v12 I encountered this error. This code appears to produce a compiler error in rescript v12.0.0 but not v11.1.4 (tested locally and on rescript playground):

module type A = {
  type t
  @module external dep: t = "dep"
}

module B: A = {
  type t = string => string
  @module external dep: t = "dep"
}
[E] Line 6, column 14:

Signature mismatch:
  Modules do not match:
    {
  type t = string => string
  external dep: t = "dep" "#rescript-external"
}
  is not included in
    A
  Values do not match:
    external dep: t = "dep" "#rescript-external"
  is not included in
    external dep: t = "dep" "#rescript-external"
  playground.res:3:3-33: Expected declaration
  playground.res:8:3-33: Actual declaration

But this code works fine:

module type A = {
  type t
  let dep: t
}

module B: A = {
  type t = string => string
  @module external dep: t = "dep"
}

In the real code this is in a .res and .resi file but above I tested in playground for a simple reproducible example.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions