Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Feature request: Set.traverse

Abierto
#779 11 comentarios 3 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
haskell
Área
data

Línea de trabajo

Comienza revisando el comportamiento existente de Set.map y las implementaciones propuestas de toList/fromList y foldMap. Compara su semántica y sus características asintóticas o de rendimiento de otro tipo, y determina después el diseño restringido aceptado para Set.traverse. Se considera terminado cuando el proyecto haya acordado una implementación y el comportamiento correspondiente esté validado.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

feature-request Set

We can’t have a Traversable instance for Set, but there’s no reason we can’t have a constrained traverse just like we have Set.map even tho we can’t have Functor either. My initial attempt uses toList/fromList:

traverse :: (Ord b, Applicative f) => (a -> f b) -> Set a -> f (Set b)
traverse f = fmap fromList . Prelude.traverse f . toList

When I asked around on Twitter, @chris-martin came up with this variant:

traverse f  = foldMap (fmap singleton . f)

which requires an extra Monoid (f a) constraint, but the latter was resolved by Liam Goodacre:

traverse f = getAp . foldMap (Ap . singleton . f)

I haven’t thought too hard about the asymptotics or other performance characteristics here, and there may well be better implementations possible, but it was certainly a fun thought experiment! What do folks think about adding a traverse for Set?

Lenguaje dominante
Haskell
Estrellas
355
Forks
194
Merge medio
2 d 12 h
PR fusionados (30 d)
6

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de haskell/containers

Todos los issues de haskell/containers

Issues similares

Más issues de Haskell

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.