Create a partially applied record constructor
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Área
- backend
Línea de trabajo
The issue describes a proposed partially applied record constructor and shows an existing applyFields implementation using Prim.Row and Record.disjointUnion. Start by reading the package’s current record construction APIs and the linked example; determine whether <*> can support field-based application while preserving the intended type constraints. Done means a documented API and tests demonstrate constructing a record without relying on field order.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Consider this:
F <$> x <*> y <*> z
This has a problem traditionally that you need to make sure you get the x/y/z order correct. If you're making forms (web forms) with e.g. a formlet library, this becomes pretty hard to manage.
What if we could do this?
partially F <$> pure {x:a} <*> pure {y:b} <*> pure {z:a}
(or alternatively by using SProxy :: SProxy "a", etc.)
So that partially F would produce a function of one argument of one of the x, y or z fields (or more, I guess). When provided with one, it accepts another argument until all fields have been consumed.
I made special version of <*> that achieves something similar:
module Record.Apply where
import Control.Applicative
import Prim.Row (class Nub, class Union)
import Record (disjointUnion)
-- API
applyFields
:: forall f inner outer combined.
Union inner outer combined
=> Nub combined combined
=> Apply f
=> f { | inner }
-> f { | outer }
-> f { | combined }
applyFields getInner getOuter =
disjointUnion <$> getInner <*> getOuter
infixl 5 applyFields as <|*>
-- Demo
newtype Foo = Foo { x :: Int, y :: String, z :: Array Int }
demo :: forall f. Applicative f => f Foo
demo = Foo <$> pure {y: ""} <|*> pure {x: 2} <|*> pure {z: []}
Which works nicely, but I think re-using <*> would be cool too. Any ideas?
- Lenguaje dominante
- PureScript
- Estrellas
- 68
- Forks
- 33
- Merge medio
- 2 d 23 h
- PR fusionados (30 d)
- 1
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
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 purescript/purescript-record
-
Thoughts on replacing Proxy with VTA?Posiblemente ocupada @pete-murphy la tomó hace 1043 días. Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 10/100
purescript/purescript-record#85 · 3 comentarios · 2 reacciones ·
-
Add `mergeFlipped`Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
purescript/purescript-record#84 · 5 comentarios · 1 reacción ·
-
insert and forall in recordAbiertostatus: needs more info
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
purescript/purescript-record#41 · 2 comentarios · 1 reacción ·
-
pick functionAbiertopurs-0.15 type: breaking change
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
purescript/purescript-record#5 · 6 comentarios ·
Todos los issues de purescript/purescript-record
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
remove the use of `forget`Abiertogood first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
Los mantenedores suelen responder en 1 día
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
milind-soni/OpenMausBot#5829 ·
Los mantenedores suelen responder en 1 día