Was ist das GHC-Äquivalent von OCaml-rectypes für rekursive Typen? Ich sehe keinen in der Dokumentation. Ist es eine versteckte Funktion?Haskell entspricht -rectypes
Antwort
Es gibt leider keinen einzigen, alle Rekursionen müssen einen Datentyp durchlaufen. Wenn Sie jedoch bereit sind, ein wenig Kopfschmerzen zu ertragen, können Sie rekursive Typen ziemlich einfach schreiben.
newtype RecArr b a = RecArr {unArr :: RecArr b a -> b}
unfold = unArr
fold = RecArr
Jetzt können wir fold
und unfold
unsere RecArr
unsere Rekursion in unseren Herzen Inhalt entfalten. Dies ist ein wenig schmerzhaft, weil es manuell, aber vollständig praktikabel ist. Als Demonstration, hier ist der y-Kombinator geschrieben mit fold
und unfold
.
y f = (\x -> f (unfold x x)) $ fold (\x -> f (unfold x x))
factorial f n = if n == 0 then 1 else n * f (n-1)
main = print (y factorial 5) -- prints 120
Es muss einen geben. – ThePiercingPrince
@ThePiercingPrince Es gibt keine ... Haskell unterstützt keine Rekursion auf Typebene, da dies einen bereits sehr komplexen Typ-Inferenz-/Prüfalgorithmus erheblich erschwert. – jozefg
Es gibt keine. Alle Rekursionen müssen durch nominale Typen gehen. Das heißt, Sie müssen einen Datentyp definieren.
- 1. Haskell entspricht Scalas groupBy
- 2. Common Lisp entspricht der Hauptfunktion von Haskell?
- 3. Haskell "Daten" entspricht in objektorientierter Sprache
- 4. Was entspricht OCamls Modulen in Haskell?
- 5. Haskell - Nichterschöpfende Musterabgleich in Haskell
- 6. multiline boolescher Ausdruck in Haskell
- 7. Entspricht os.getpardir()?
- 8. IsFinite() entspricht
- 9. Entspricht nicht
- 10. Entspricht JDIC?
- 11. Entspricht CultureInfo.GetCultureInfo?
- 12. Äquivalent von Python eval in Haskell
- 13. Haskell Punktoperator
- 14. Haskell Interactive
- 15. Haskell Einrückungsstil
- 16. Haskell Aufzählung
- 17. Haskell Zufallsgenerierung
- 18. Haskell Datendeklarationen
- 19. Haskell Bildverarbeitungsbibliothek?
- 20. Haskell Currying
- 21. Laufzeitspeicher Haskell
- 22. Haskell Funktionszusammensetzung
- 23. Haskell typeclass
- 24. Haskell Wiederverwendungsmuster
- 25. Haskell ncurses
- 26. Haskell Importmodul
- 27. Haskell Debuggen
- 28. Haskell-Binärkompatibilität
- 29. Understanding Haskell
- 30. Was ist das OCaml-Idiom, das der Python-Bereichsfunktion entspricht?
Alle Definitionen in Haskell sind rekursiv. Versuchen Sie "keinen Schalter". –
@ n.m. OCaml erlaubt equirecursive Typen, die Haskell's Äquivalent von 'Typ T a = T -> a 'wäre und ähnlich – jozefg
@jozefg nachgeschlagen hat. Beeindruckend. Macht das wirklich Sinn? Normalerweise ist ein solcher rekursiver Typ == ein Codierungsfehler. –