Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Standard library map on bound function

Offen
#807 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
tooling

Rechercherichtung

Beginne mit der gemeldeten test.py-Reproduktion und konzentriere dich auf das Zusammenspiel von returns.pointfree.bind, ResultE und Pythons integriertem map. Vergleiche die von mypy inferierten Typen mit der funktionierenden for-Schleife und den expliziten g-Alternativen; abgeschlossen ist die Arbeit, wenn das ursprüngliche Beispiel map(bind(g), map(f, range(3))) ohne Fehler die Typprüfung besteht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug

Bug report

Mypy does not appear to correctly handle the standard library map function over an iterable of containers that returns an iterable of containers, when the function being mapped over the data has had returns.pointfree.bind applied to it. The same code when used without map (by explicit use of a for-loop) or a bind (by explicitly handling a container input) will not result in an error.

What's wrong

Code to reproduce issue
from typing import Iterable

from returns.pointfree import bind
from returns.result import ResultE
from returns.result import safe


@safe
def f(x: int) -> str:
    return str(x)


@safe
def g(x: str) -> int:
    return int(x)


def h(xs: Iterable[ResultE[int]]) -> None:
    for x in xs:
        print(x.unwrap())


if __name__ == "__main__":
    h(map(bind(g), map(f, range(3))))
Mypy output
$ mypy test.py
test.py:24:11: error: Argument 1 to "map" has incompatible type "Kinded[Callable[[KindN[Result[Any, Any], str, Exception, NoReturn]], KindN[Result[Any, Any], int, Exception, NoReturn]]]"; expected "Callable[[Result[str, Exception]], Res
ult[int, Exception]]"  [arg-type]
test.py:24:11: note: "Kinded[Callable[[KindN[Result[Any, Any], str, Exception, NoReturn]], KindN[Result[Any, Any], int, Exception, NoReturn]]].__call__" has type "Callable[[KindN[Result[Any, Any], str, Exception, NoReturn]], KindN[Resul
t[Any, Any], int, Exception, NoReturn]]"
Found 1 error in 1 file (checked 1 source file)
Python output
$ python test.py
0
1
2

How it should be

When the h function is replaced with a for-loop in __main__ no issues are reported by Mypy and the code executes correctly:

if __name__ == "__main__":
    for x in map(f, range(3)):
        print(x.bind(g).unwrap())

Can also fix the issue by swapping out the g function:

def g(x: ResultE[str]) -> ResultE[int]:
    return x.map(int)

<snip>

if __name__ == "__main__":
    h(map(g, map(f, range(3))))

System information

  • python version: 3.8.6
  • returns version: 0.15.0
  • mypy version: 0.800 (also observed in v0.782 due to classess library dependency)
Vorherrschende Sprache
Python
Sterne
4.4k
Forks
154
Ø Merge
3 Std. 5 Min.
Gemergte PRs (30 T.)
22

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus dry-python/returns

Alle Issues in dry-python/returns

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.