Juxt
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 38/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- fsharp
- Área
- tooling
Línea de trabajo
Comienza en el módulo Operators e inspecciona las funciones existentes sequence, item, uncurry y uncurryN para seguir su nomenclatura y organización. Implementa las variantes propuestas juxt2, juxt3 y juxt4, añade después cobertura para los ejemplos que producen tuplas y confirma que las pruebas del proyecto pasan.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hello and thank you for creating F#+! I'd like to propose adding juxtapose functions to the Operators module. These functions are defined as follows:
let juxt2 f g x = f x, g x
let juxt3 f g h x = f x, g x, h x
let juxt4 f g h i x = f x, g x, h x, i x
// etc
This function is called juxt in Clojure and the Python toolz library. I believe this function was first introduced by John Backus in his paper called Can programming be liberated from the von Neumann style? where it was called construction.
In Haskell and F#+ there's a similar function called sequence. Unfortunately, it returns a list and not a tuple, forcing all the result types to be the same.
juxt in combination with item and uncurry/uncurryN make point-free programming with tuples easier. Here are some examples:
open FSharpPlus
// Basic examples
let square: float -> float =
juxt2 id id >> uncurry ( * )
let avg: list<float> -> float =
juxt2 List.sum (List.length >> float) >> uncurry (/)
// Grouping and ungrouping tuples
let ``(a,b),c`` (a,b,c) = (a,b),c
let ``~(a,b),c~`` ((a,b),c) = a,b,c
``(a,b),c``(1,2,3) = (juxt2 (juxt2 item1 item2) item3)(1,2,3) // ((1, 2), 3)
``~(a,b),c~``((1,2),3) = (juxt3 (item1 >> item1) (item1 >> item2) item2)((1,2),3) // (1, 2, 3)
Please let me know if this function already exists in F#+ (or F# for that matter) and I missed it. Thank you!
- Lenguaje dominante
- F#
- Estrellas
- 941
- Forks
- 106
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de fsprojects/FSharpPlus
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
fsprojects/FSharpPlus#683 · 1 comentario · 2 reacciones ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
fsprojects/FSharpPlus#678 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
fsprojects/FSharpPlus#644 ·
-
breaking change F#+ v2.0
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
fsprojects/FSharpPlus#643 ·
-
lens type signatureAbiertobreaking change F#+ v2.0
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
fsprojects/FSharpPlus#641 ·
Todos los issues de fsprojects/FSharpPlus
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ScoopInstaller/Extras#18848 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
nuxt-modules/mcp-toolkit#364 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
chef/mixlib-shellout#287 ·