Create a partially applied record constructor
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Domínio
- backend
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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?
- Linguagem predominante
- PureScript
- Estrelas
- 68
- Forks
- 33
- Merge médio
- 2d 23h
- PRs com merge (30d)
- 1
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de purescript/purescript-record
-
Thoughts on replacing Proxy with VTA?Talvez já em andamento @pete-murphy assumiu há 1043 dias. Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 10/100
purescript/purescript-record#85 · 3 comentários · 2 reações ·
-
Add `mergeFlipped`Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 35/100
purescript/purescript-record#84 · 5 comentários · 1 reação ·
-
insert and forall in recordAbertastatus: needs more info
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
purescript/purescript-record#41 · 2 comentários · 1 reação ·
-
pick functionAbertapurs-0.15 type: breaking change
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 20/100
purescript/purescript-record#5 · 6 comentários ·
Todas as issues de purescript/purescript-record
Issues semelhantes
-
ManageSieve proxy: a backend's NO/BYE greeting is skipped as a capability line and reported as EOFAbertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Mend: dependency security vulnerability
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
ManageIQ/manageiq-pods#1476 ·
Mantenedores costumam responder em até 1 dia
-
mcp: typed tool handlers lose wrapped JSON-RPC errorsTalvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
modelcontextprotocol/go-sdk#1529 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
FinanceFlash/unvibecode#818 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100