Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Standard library map on bound function

Aperta
#807 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
tooling

Direzione di ricerca

Inizia con la riproduzione segnalata in test.py, concentrandoti sull’interazione tra returns.pointfree.bind, ResultE e il map integrato di Python. Confronta i tipi inferiti da mypy con il for funzionante e le alternative g esplicite; il lavoro è completato quando l’esempio originale map(bind(g), map(f, range(3))) supera il controllo dei tipi senza errori.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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)
Lingua principale
Python
Stelle
4.4k
Fork
154
Merge medio
3h 5m
PR unite (30g)
22

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dry-python/returns

Tutte le issue di dry-python/returns

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.