[API Proposal]: Extend the reduce and reduceBack to Collections
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- fsharp
- Ambito
- developer-experience
Direzione di ricerca
Inizia leggendo l’implementazione esistente della funzione reduce e la discussione con 41 commenti per comprendere le problemi di API ancora irrisolti. Confronta le firme proposte di reduce e reduceBack con le operazioni native di list, array e seq. Il lavoro è completo quando sono disponibili un design concordato e una proof of concept che coprano le collezioni generiche e il comportamento con input vuoto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Background and motivation
From the requirements point of view: the fold function must provide init, reduce does not require init, which means no longer needs to write boilerplate "match with" code like "extract the first element from generic Collections as init, the remaining elements as sequence, and then pass it to fold".
From a reasonable point of view: list/array/seq all provide native reduce methods, list/array also provides native reduceBack methods. This generic encapsulation is not difficult to implement, and other languages (except fundamental FPs like Haskell) generally provide reduce methods, which is reasonable.
I know there is a reduce function implementation now, but that one is very difficult to use. To be honest, I have no idea how to pass parameters.
API Proposal
let inline reduce (folder: 'State->'T->'State) (foldable: '``Foldable<'T>``) : 'State
let inline reduceBack (folder: 'T->'State->'State) (foldable: '``Foldable<'T>``) : 'State
API Usage
reduce (*) [1; 2; 3; 4; 5] |> should equal 120
reduce (+) ([]: int list) // throws an exception
Alternative Designs
No response
Risks
No response
Are you willing to help with a proof-of-concept (as PR in that or a separate repo) first and as pull-request later on?
Yes, please assign this issue to me.
- Lingua principale
- F#
- Stelle
- 941
- Fork
- 106
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di fsprojects/FSharpPlus
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
fsprojects/FSharpPlus#683 · 1 commento · 2 reazioni ·
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
fsprojects/FSharpPlus#678 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
fsprojects/FSharpPlus#644 ·
-
breaking change F#+ v2.0
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
fsprojects/FSharpPlus#643 ·
-
lens type signatureApertabreaking change F#+ v2.0
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
fsprojects/FSharpPlus#641 ·
Tutte le issue di fsprojects/FSharpPlus
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
jessepollak/home#1454 ·
I maintainer di solito rispondono entro 1 giorno
-
kinogo-films.vipApertaN: AdGuard for iOS P3: Medium T: Ads
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
AdguardTeam/AdguardFilters#242874 ·
I maintainer di solito rispondono entro 1 giorno
-
Theme: Bots Type: Bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
internetarchive/openlibrary#13743 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
bytedance/trae-agent#526 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno