Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internal Error on sum(sorted(map(lambda x: x + 1, xs))) #222

Closed
kmyk opened this issue Sep 6, 2021 · 3 comments · Fixed by #237
Closed

Internal Error on sum(sorted(map(lambda x: x + 1, xs))) #222

kmyk opened this issue Sep 6, 2021 · 3 comments · Fixed by #237
Labels
bug Something isn't working

Comments

@kmyk
Copy link
Collaborator

kmyk commented Sep 6, 2021

Summary / 概要

簡単なコードのはずなのになぜかエラーになる。
@soraiemame さんが見つけてくれました

  • Python から core 言語への変換にバグがありそう?
    • $ stack run debug XXX.py ってやると core 言語へ変換した直後のコードが見れるのでこれを眺めてみるとよさそう
  • あるいは core 言語での型推論にバグがあるかも?
    • たとえば組み込み関数 sorted の型を int -> int list だと勘違いして型推論しちゃってるとか

Steps to reproduce / 再現方法

以下のコードを変換する:

def solve(xs: List[int]) -> int:
    return sum(sorted(map(lambda x: x + 1, xs)))

environments:

  • version: v5.5.0.0

Expected behavior / 期待される挙動

Actual behavior / 実際の挙動

Internal Error (implementation's bug?): Jikka.Core.Convert.TypeInfer: failed to solve type equations: failed to unify $43 and int list: different type ctors int and 
int list
@kmyk kmyk added the bug Something isn't working label Sep 6, 2021
@zer0-star
Copy link
Contributor

これについて少し原因を探ってみたのですが、RestrictedPythonからCoreに変換する過程で、mapの内部でgo0に渡される引数をxs_k[i]とすべきところをxs_kのままにしてしまっているようです(bodyのところです)

https://github.com/kmyk/Jikka/blob/af3bc160a7bb9b10082c03f3e897f13716474a28/src/Jikka/RestrictedPython/Convert/ToCore.hs#L107-L116

ここを修正したら一応ちゃんと動くようになりました(テストは走らせていませんが)

@kmyk
Copy link
Collaborator Author

kmyk commented Sep 20, 2021

これ天才です。
xs_k を付けて満足して [i] の部分を忘れてたんだと思います。k の変数にも i の変数にも両方 i って使ってて、書いたとき混乱してた感じがしますね。

@zer0-star せっかくなのでよければプルリクもお願いします (テストは GitHub 上で自動で実行されるので手元では動くのを確認する程度で大丈夫です)

@zer0-star
Copy link
Contributor

OKです、やっておきます

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants