Plutarch codegen: Recursive data type support
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
Inizia leggendo la definizione di Plutarch pfix e tracciando i punti di ingresso esistenti della generazione del codice per i tipi ricorsivi e mutuamente ricorsivi. Confronta gli esempi List, F e G nell’issue con i termini generati. Il lavoro è completato quando è definito e dimostrato un approccio uniforme alla generazione per i tipi di dati ricorsivi, inclusa la gestione rilevante dei costruttori polimorfici.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
One does not simply recurse in Plutarch.
My raw lambda calculus skills are not at the level where I'm just popping out fixpoint based terms so let's get back to the drawing board:
For a canonical recursive data type example and some mutually recursive ones:
sum List a = Cons a (List a) | Nil
sum F a = Rec (G a) | Nil
sum G a = Rec (F a) | Nil
What we do eventually is invoke some polymorphic class method on the constituents of each constructor (if it's a sum type, but also for products and records). This is where the problem happens right? How would we use pfix in this situation?
(let's imagine we have an annotation that tells us whether a type is infinite or not).
pfix :: Term s (((a :--> b) :--> (a :--> b)) :--> (a :--> b))
fib :: Term s (PInteger :--> PInteger)
fib = phoistAcyclic $
pfix #$ plam $ \self n ->
pif
(n #== 0)
0
$ pif
(n #== 1)
1
$ self # (n - 1) + self # (n - 2)
Main question is: How do we generate code in a uniform manner such that we can recurse properly?
- Lingua principale
- Haskell
- Stelle
- 33
- Fork
- 1
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
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 mlabs-haskell/lambda-buffers
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
mlabs-haskell/lambda-buffers#296 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
mlabs-haskell/lambda-buffers#295 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
mlabs-haskell/lambda-buffers#294 ·
-
Dykstra HFAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
mlabs-haskell/lambda-buffers#293 ·
-
Nix-free pathApertadevops
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
mlabs-haskell/lambda-buffers#292 ·
Tutte le issue di mlabs-haskell/lambda-buffers
Issue simili
-
cabal update underdocumentedForse già presa @KeuqS l’ha presa oggi. Apertaattention: pr-welcome documentation good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 67/100
haskell/cabal#12447 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
objectionary/phino#1858 ·
I maintainer di solito rispondono entro 1 giorno
-
status: needs triage type: enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
haskell/haskell-language-server#5128 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 83/100
NorfairKing/safe-coloured-text#13 · 1 commento ·