Code doesn't typecheck when moving a type alias between modules

オープン
#4,542 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
領域
compilers

調査の方向性

Start with the linked minimal repository and reproduce the failure using the two referenced commits, running spago build and comparing the module placement of the type alias. Use src/Main.purs and the compiler error to isolate the typechecking path. Done means the alias can move between modules while both versions compile without the Pos instance error.

索引モデルが issue の本文から書いたものです。

説明

type: bug

Description

I discovered a weird compiler error in a large project, and narrowed it down to an alias having to be defined in the right module. Moving the alias to another module breaks type checking, with the error being something about Pos not being implemented. See the below output:

compiler-bug-example on 󰘬 master via <=> v0.15.10 via  impure (nix-shell-env) took 2m43s
$ spago build
[1 of 1] Compiling Main
[1/1 NoInstanceFound] src/Main.purs:16:7

  16  bar = discreteFromDense
            ^^^^^^^^^^^^^^^^^

  No type class instance was found for

    Data.Typelevel.Num.Sets.Pos t0

  The instance head contains unknown type variables. Consider adding a type annotation.

  while checking that type forall (c :: Symbol) (u :: Symbol) (m :: Type) (n :: Type). Pos m => Pos n => UnitScale @Type c u (Tuple m n) => Approximation -> Dense c -> Tuple ... ...
    is at least as general as type Approximation -> Dense "SEK" -> Tuple (Discrete "SEK" "öre") (Dense "SEK")
  while checking that expression discreteFromDense
    has type Approximation -> Dense "SEK" -> Tuple (Discrete "SEK" "öre") (Dense "SEK")
  in value declaration bar

  where t0 is an unknown type

           Src   Lib   All
Warnings   0     0     0
Errors     1     0     1
[error] Failed to build.

To Reproduce

Steps to reproduce the behavior.

I have set up a minimal repository here

Steps:

Expected behavior

Expected to be able to move type alias between modules.

Additional context

Add any other context about the problem here.

PureScript version

0.15.10

主要言語
Haskell
スター
8.9k
フォーク
575
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

purescript/purescript のほかの issue

purescript/purescript の issue をすべて見る

似ている issue

Haskell の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。